数据结构的排序总结

排序:按关键字的非递减或非递增顺序对一组记录重新进行排序的操作。

 

排序的稳定性:假设i位和j位的值相等,排序前后的i位和j位的前后顺序依旧不变,则称所有的排序方法是稳定的。若有一组关键字不满足要求,则该排序方法就是不稳定的。

 

排序中依据原则来分类:

插入排序、交换排序、选择排序、归并排序、基数排序

排序中依据过程工作量来分类:

简单排序,时间复杂度O(n2)

先进排序,时间复杂度O(nlog2n) 快速排序、归并排序、堆排序

基数排序:时间复杂度O(d·n)

 

插入排序:

直接插入排序:顺序查找,时间复杂度O(n2),空间复杂度O(1)

数据结构的排序总结_第1张图片

折半插入排序:折半查找,时间复杂度O(n2),空间复杂度O(1),比较次数与待排序序列的初始排列无关。

希尔排序:缩小增量排序,时间复杂度位O(n3/2), 空间复杂度O(1)。


数据结构的排序总结_第2张图片

 

 

交换排序:
冒泡排序:时间复杂度O(n2),空间复杂度O(1)。



快速排序:时间复杂度O(nlog2n),空间复杂度最好为O(log2n),最坏为O(n).

1.     附设两个指针high和low,设置枢轴关键字pivotkry

2.     从表最右侧位置,依次向左搜索第一个关键字小于piv的记录和枢轴记录交换。

3.     从表的最左侧位置,依次向右搜索找到第一个关键字大于piv的记录和枢轴记录交换。

4.     重复2和3步骤,直到low等于high。

数据结构的排序总结_第3张图片

 

几趟排序后:

 

选择排序:

简单选择排序:时间复杂度O(n2),空间复杂度O(1)。选最小。

 

初始关键字:

一趟排序结果:  49  38  65 97  49  13 27  76

二趟排序结果:  13  38  65 97  49  49 27  76

三趟排序结果:   13  27 65  97  49  49  38  76

四趟排序结果:   13  27  38  49  97 49  65  76

五趟排序结果:   13  27  38  49  49 97  65  76

六趟排序结果:   13  27  38  49  49 65  97  76

七趟排序结果:   13  27  38  49  49 65  76  97

 

堆排序:时间复杂度O(nlog2n),空间复杂度O(1)。树形选择排序。反复进行交换和堆调整。

当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆。当父结点的键值总是小于或等于任何一个子节点的键值时为最小堆

堆排序就是将无序序列建立成初堆以后,反复进行交换和堆调整。

 

详细图解可参考

http://www.cnblogs.com/dolphin0520/archive/2011/10/06/2199741.html

 

 

归并排序:时间复杂度O(nlog2n),空间复杂度O(n)。

 

基数排序:不建立在关键字的基础上。


图示来源于严蔚敏的数据结构C语言版。

你可能感兴趣的:(数据结构,排序)