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

Posted xhyxhy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了有关快速排序和冒泡排序的理解相关的知识,希望对你有一定的参考价值。

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

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

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

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

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

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

以上是关于有关快速排序和冒泡排序的理解的主要内容,如果未能解决你的问题,请参考以下文章

数据结构(15)---排序(冒泡排序, 快速排序, 归并排序, 计数排序)

php四种基础算法:冒泡,选择,插入和快速排序法

nodejs实现冒泡排序和快速排序

php四种基础算法:冒泡,选择,插入和快速排序法

图形化排序算法比较:快速排序插入排序选择排序冒泡排序

算法 | 排序算法图形化比较:快速排序插入排序选择排序冒泡排序