排序问题思考与总结

基于比较的排序问题的计算时间下界为Ω(nlogn)。

合并排序算法mergeSort)(是渐近最优算法),时间复杂度为O(nlogn)。思路为将数组段二分,直到得到大小为1n个数组段,将排好序的两个数组合并,依次合并得到排好序的最终数组。其中有递归调用。

自然合并排序mergeSort的变形)消除了算法中的递归。此算法记录下已经排好序的子串。直接把排好序的数组段放在原数组中。因此,此种算法所需的合并次数较少(即原本是自然顺序的数组段可以不管)。在一些极端情况下可以节省时间。例如,原本就是自然序的长度为n的数组,只需要O(n)的时间。而合并排序仍需O(nlogn)。可以说,自然合并排序比较灵活。

归并排序的非递归实现如下,思想和递归正好相反,原来的递归过程是将待排序集合一分为二,直至排序集合就剩下一个元素位置,然后不断的合并两个排好序的数组。所以非递归思想为,将数组中的相邻元素两两配对。用merge函数将他们排序,构成n/2组长度为2的排序好的子数组段,然后再将他们排序成长度为4的子数组段,如此继续下去,直至整个数组排好序。

关于归并排序详解(非常详尽!)http://blog.csdn.net/sophie_wise8/article/details/7673813

快速排序,以数组中的一个数为基准,比它小的在左边的数组中,比它大的在右边的数组中,这样把左右两边排好序后就得到自然序列。快速排序算法的性能取决于划分的对称性。如果每次划分都是恰好均分,则用时最少,O(nlogn)。如果每次划分都是分成1n-1,则耗时最多,O(n^2)。通过修改,可以在划分前随机选择基准数,从而可以期望划分是对称的。

线性时间选择(基于快速排序算法而得),当要选择第k小的元素时,先用类似快速排序的方法将数组分为jn-j两堆,若k小于等于j,则在前面大小为j的数组中按此方法递归找第k个。反之,则在后面大小为n-j的数组中找第k-j个。最坏情况下需要Ω(n^2),但此算法平均性能很好。同样可以随机选择基准。P.S.通过选出合适的基准可以使得在最坏情况下也只用O(n)时间完成。

最接近点对问题,从一维推广到二维。一维:分成相等大小的两堆,找出最接近点对,同分界部分的最小点对比较。时间复杂度θ(nlogn)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值