排序算法的比较

1.内排序和外排序

1)内排序:要排序的数据全部放在内存中

2)外排序:要排序的数据太多,不能同时放在内存中,整个排序过程需要在内存和硬盘之间进行多次数据交换

2.稳定性

  如果序列中有两个元素相等,排序结束后,能够保证他们原有的相对顺序不变,那这种排序算法就是稳定的。

3.常见排序算法的稳定性

  稳定:冒泡排序、直接插入排序、归并排序

  不稳定:直接选择排序,希尔排序,堆排序,快速排序

4.常见算法比较

5.排序算法适用性比较

5.1简单排序算法适用性比较

数据量比较小时,采取简单排序算法:

  直接选择排序和冒泡排序:在比较次数上,两者一样;在交换次数上,冒泡排序在内循环发生交换,而简单选择排序在外循环发生交换;所以整体排序效率高于冒泡排序

  直接插入排序和直接选择排序:比较次数和交换次数均比冒泡和直接选择少,所以直接插入排序效率更高

5.2改进排序算法适用性比较

数据量比较大时,采取改进排序算法(时间复杂度低):

  时间复杂度上,但最坏情况下,堆排序和归并排序是O(nlogn),而快速排序为O(n2);平均情况下,三者均为O(nlogn),但是绝大多应用情况下,快速排序最快,归并排序其次,堆排序最慢;

  空间复杂度上,堆排序使用O(1)的空间,归并排序由于递归和需要临时数组要O(n)的空间,快速排序由于递归则需要O(nlogn)~O(n)的空间;

  稳定性上:堆排和快排不稳定,归并排序是稳定的

  堆排序:特别适合数据量特别大的场合,因为快排和归并都是基于递归,大数据量下容易发生栈溢出;

  归并排序:适合被采用在需要稳定性的场景,并且不要求对序列很快地随机访问,所以在链表排序中很适用

  快速排序:优化的快排是公认性能最好的排序,stl的sort函数就是采用优化的快排

原文地址:https://www.cnblogs.com/Joezzz/p/9664996.html