冒泡排序:将第一位的值与后面所有的值比较,碰到小的就与其交换,第一次循环得到最小的数,再对后面的数循环,得到最小的数,依次下去,复杂度为o(n*n);
快速排序:将第一位的值与后面的值比较,得到这个值在数组中的准确位置,第一次循环与冒泡排序的复杂度式一样的,都是n,可循环之后把数组分为两个数组,继续对两个数组排序。复杂度为log2(n)*n~n*n。
那么为什快速排序会比冒泡排序快呢?
本质原因是快速排序将每一步比较的信息都利用了,而快速排序则丢失了一些比较的信息。为将两种排序类比为一个全国打架比赛的排名,冒泡排序是从序号为2开始,每个人都和序号为1的人打架,输了的就交换序号,这样先得出最垃圾的那个,可这样的话很可能会丢失一些信息,比如序号为99的实际与序号为100的比过(都不是最垃圾的),知道他们两谁更强,可除了最垃圾的那个人之外,冒泡排序视后面的人是无序的,这样就把99和100比过这个信息浪费了。而快速排序每个比过的人的信息都会被利用,就像前面一个数组的数的最大值都比后面一个数组的最小值小,这就是利用了99实际和100比过等等这些信息,所以快排之后的数组里的实际信息比冒泡排序是要多的。冒泡排序与快速排序都得到了某个数在数组里的准确位置,可快排还得到了更多信息,所以快排比冒泡排序快。
为什么快速排序是不稳定的?
因为每一个数在数组里的位置都是不确定的,意思就是每一个排序后得到的数的准确位置是不确定的,而根据数学可知,数排在数组中间能够得到的有用的信息更多。
时间: 2024-10-22 01:40:18