
排序
nanjunxiao
这个作者很懒,什么都没留下…
展开
-
中值排序发散
中值排序的平均时间性能是nlog(n),但是最坏情况下(基本有序),partition函数复杂度为O(n^2),这样就使得中值排序性能退化到O(n^2)。 随机选择pivotIndex将使得selectKth的性能为线性,可以避免退化情况,从而可以使中值排序平均性能达到O(nlogn)。 优化算法:有一个线性的选择算法,能够确保中值排序最坏情况仍为O(nlogn),称为BFPRT。原创 2012-08-24 11:04:34 · 1358 阅读 · 0 评论 -
堆排序
堆排序是对选择排序的优化,利用选择排序中的相对关系,减少比较次数。堆排序主要分为两个部分,初始建堆过程和堆定点更替后堆的调整部分。最好,最坏,平均时间复杂度都为O(nlogn),尽管如此,平均情况下,快排表现还是要好于堆排序。本文以数组为堆的存储结构,数组从0下标开始。将数组非降序排序,其中使用大顶堆,每次最大元素换到最后,最后数组即为升序。main部分int main() { c原创 2012-09-15 14:39:56 · 605 阅读 · 0 评论 -
快排变种
快排各种各样的优化: 1.利用栈来取代递归 2.选择基于三中值分区的中枢值 3.设定分割字数组的阈值,小于该值直接上插入排序 4.在处理字数组时候,首先将大的字数组压入栈来最小化栈的总大小,确保小的问题首先被解决。 要确保最坏情况下O(n*logn)复杂度,使用例如BFPRT的选择算法,抑或考虑堆排序,下一篇我也将自己写下堆排序。原创 2012-08-24 15:14:01 · 749 阅读 · 0 评论 -
插入排序
不解释,直接上代码 #include void insert(int arry[], int iIndex) { int iSaved = arry[iIndex]; int iPos = iIndex-1; while(iPos>=0 && iSaved { arry[iPo原创 2012-08-23 20:10:37 · 501 阅读 · 0 评论 -
快排
一直使用c++ STL的sort,没有自己亲自写过,上代码。 #include int Partition(int arry[], int low, int high) { //no need to bound condition int key = arry[low]; while(low {原创 2012-08-23 21:02:35 · 461 阅读 · 0 评论