常用排序算法总结
稳定性:
若存在多个关键字相同的记录,经过排序后这些具有相同关键字的记录之间的相对次序保持不变,该排序方法是稳定的;
若具有相同关键字的记录之间的相对次序发生改变,则称这种排序方法是不稳定的。
一.插入排序
①.直接插入排序(稳定)
使用直接插入排序,对于具有n个记录的文件,要进行n-1趟排序
②.希尔排序(不稳定)
该方法实质上是一种分组插入方法。
一般取d1=n/2,di+1=di/2。如果结果为偶数,则加1,保证di为奇数。
希尔排序是不稳定的,希尔排序的执行时间依赖于增量序列,其平均时间复杂度为O(n^1.3).
二.选择排序
①.直接选择排序(不稳定)
直接选择排序的平均时间复杂度为O(n^2)
②.堆排序(不稳定)
将待排数组看作一个完全二叉树,二叉树中每个节点都比子节点大(大根堆)/每个节点都比子节点小(小根堆),
然后把根节点和最后一个节点交换,调整树的结构,重复操作,完成排序
堆排序的最坏时间复杂度为O(nlgn),堆排序的平均性能较接近于最坏性能。由于建初始堆所需的比较 次数较多,所以堆排序不适宜于记录较少的文件。堆排序是就地排序,辅助空间为O(1)三.交换排序
①.冒泡排序(稳定的)
冒泡排序的最坏时间复杂度为O(n^2)
由于它的记录移动次数较多,故平均性能比直接插入排序要差得多
②.快速排序:(不稳定的)
四.归并排序
时间复杂度O(nlog2n),空间复杂度O(n)
五.基数排序
基数排序的基本思想是:从低位到高位依次对待排序的关键码进行分配和收集,经过d趟分配和收集,就可以得到一个有序序列.