【Sort】QuickSort】的更多相关文章

快速排序,平均运行时间O(N log N),最坏运行时间O(N^2). 我觉得先看Python版的快排算法(http://www.cnblogs.com/fcyworld/p/6160558.html)比较容易理解. 整体思路: 首先从数组中选出一个值pivot,然后依据这个值pivot,把数组分成大小两部分,然后再分别对这两部 分利用快排. 具体细节: 1.在具体的实现中,因为pivot的选择会对数组的划分产生很大的影响,若划分的不均衡,严重影响排序效率. 为了尽可能消除这种影响,同时取数组中…
Python版的快排,使用递归. 1.设置递归终止条件,当元素个数<1时 2.从列表中pop出一个元素pv 3.列表中的剩余值与pv进行对比,大的放入smaller列表,小的放入larger列表 4.返回qs(smaller)+[pv]+qs(larger) 代码如下: def quicksort(array): smaller=[];larger=[] if len(array)<1: return array pv=array.pop() for num in array: if num&…
这篇文章包含了插入排序,希尔排序,堆排序,归并排序和快速排序,是前几篇文章的集合. 一共包括三个文件 sort.h sort.cpp main.cpp 1.main.cpp #include <iostream> #include "sort.h" using namespace std; int main() { \\test code ; } 2.sort.h #ifndef SORT_H_ #define SORT_H_ void intersort(int *num…
QuickSort In the previous challenge, you wrote a partition method to split an array into 2 sub-arrays, one containing smaller elements and one containing larger elements. This means you 'sorted' half the array with respect to the other half. Can you…
下面这段问答摘自csdn: 把基数排序说成桶排序应该是没有太大问题的.总的说来,应该把这一类归为分配排序,由于分配排序的一些缺陷,主要是时间代价很差,改进成为桶式排序(bucket sort),而桶排序的基本思路是将较少的纪录分配到每个桶,然后用较快的“收尾排序”来对每桶中的纪录进行排序.在此基础上,当允许基于分配排序的收尾排序时,为了尽量减少桶的数量并缩短排序时间,发展出了基数排序(Radix Sort).基数的选择:如果是数字,最常用的是2和10这两个了,当然是由于二进制和十进制的关系,就如…
快速排序,时间复杂度O(N*logN),要能熟练掌握! 以下主要参考http://blog.csdn.net/morewindows/article/details/6684558, 感谢原博主! 该方法的基本思想是: 1.先从数列中取出一个数作为基准数. 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边. 3.再对左右区间重复第二步,直到各区间只有一个数. 虽然快速排序称为分治法,但分治法这三个字显然无法很好的概括快速排序的全部步骤.因此我的对快速排序作了进一步的说…
太晚了,明天有时间在写算法思路,先贴代码 ------------------------------------------------ 刚答辩完,毕业好难,感觉自己好水 ------------------------------------------------ 解题思路: 由低位到高位进行排序,比如数组33,22,11,44,67,76,95,98,89,107,最大的数107,也就是需要 三趟排序: 1.相同位置上的数字按照大小排序 2.相同位置上,相同大小的数字按照发现的先后排序.…
归并排序运行时间O(N log N),但是由于需要线性附加内存,所以很少用于主存排序. 算法核心在于以下三条语句,分治递归,分别对左半边和右半边的数组进行排序,然后把左右半边的数组一一进行比较放入数组 msort(nums,tmp,lp,center); msort(nums,tmp,center+,rp); merge(nums,tmp,lp,center+,rp); 下面是代码,主要包括三个函数: void mergesort(int *nums,int n) { int *tmp=new…
堆排序,时间复杂度O(N log N),实际使用中慢于使用Sedgewick增量的增量排序. 大致思路: 1.先在数组中建堆,如果是增量排序,则需要建一个大堆 2.每循环一次,把最大的数,也就是nums[0],放入堆尾,同时把nums[0]下滤 void heapsort(int *nums,int n) { int i; ;i>=;i--) percdown(nums,i,n); ;i>;i--) { nums[]^=nums[i]; nums[i]^=nums[]; nums[]^=num…
希尔排序(ShellSort),缩小增量排序,使用希尔增量时最坏运行时间O(n^2),不同的增量会对运行时间产生显著影响. void shellsort(int *nums,int n) { int gap,i,j; int tmp; ;gap>;gap/=) //改变增量 { for(i=gap;i<n;i++) { tmp=nums[i]; ;j-=gap) if(tmp<nums[j-gap]) nums[j]=nums[j-gap]; else break; nums[j]=tm…