码迷,mamicode.com
首页 > 编程语言 > 详细

有关快速排序和冒泡排序的理解

时间:2016-03-15 18:44:38      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:

冒泡排序:将第一位的值与后面所有的值比较,碰到小的就与其交换,第一次循环得到最小的数,再对后面的数循环,得到最小的数,依次下去,复杂度为o(n*n);

快速排序:将第一位的值与后面的值比较,得到这个值在数组中的准确位置,第一次循环与冒泡排序的复杂度式一样的,都是n,可循环之后把数组分为两个数组,继续对两个数组排序。复杂度为log2(n)*n~n*n。

那么为什快速排序会比冒泡排序快呢?

本质原因是快速排序将每一步比较的信息都利用了,而快速排序则丢失了一些比较的信息。为将两种排序类比为一个全国打架比赛的排名,冒泡排序是从序号为2开始,每个人都和序号为1的人打架,输了的就交换序号,这样先得出最垃圾的那个,可这样的话很可能会丢失一些信息,比如序号为99的实际与序号为100的比过(都不是最垃圾的),知道他们两谁更强,可除了最垃圾的那个人之外,冒泡排序视后面的人是无序的,这样就把99和100比过这个信息浪费了。而快速排序每个比过的人的信息都会被利用,就像前面一个数组的数的最大值都比后面一个数组的最小值小,这就是利用了99实际和100比过等等这些信息,所以快排之后的数组里的实际信息比冒泡排序是要多的。冒泡排序与快速排序都得到了某个数在数组里的准确位置,可快排还得到了更多信息,所以快排比冒泡排序快。

为什么快速排序是不稳定的?

因为每一个数在数组里的位置都是不确定的,意思就是每一个排序后得到的数的准确位置是不确定的,而根据数学可知,数排在数组中间能够得到的有用的信息更多。

有关快速排序和冒泡排序的理解

标签:

原文地址:http://www.cnblogs.com/xuehongyang/p/5280508.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!