您的位置:首页 > 理论基础 > 数据结构算法

数据结构的排序总结

2015-09-15 11:53 405 查看
排序:按关键字的非递减或非递增顺序对一组记录重新进行排序的操作。

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

排序中依据原则来分类:

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

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

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

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

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

插入排序:

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



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

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



交换排序:

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



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

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

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

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

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



几趟排序后:



选择排序:

简单选择排序:时间复杂度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语言版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: