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函数就是采用优化的快排