排序和查找
不忘初心-慢慢懂
纳百川,形成自己知识体系
展开
-
快速排序
快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序。它采用了一种分治的策略,通常称其为分治法(Divide-and-ConquerMethod)。 该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 #include #includ原创 2013-05-31 09:28:54 · 1074 阅读 · 0 评论 -
二分查找
二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。 假设其数组长度为n,其算法复杂度为o(log(n)) 代码: #include using namespace std; bool BinarySearch(int data[],int start, int end, int number){ while(start原创 2014-08-01 09:09:42 · 1814 阅读 · 5 评论 -
堆排序
第一次实现堆排序,花了近两个小时。 主要还是堆调整,原理网上很多,直接给出运行代码和结果: 代码: #include using namespace std; void adjustHeap(int number[],int k,int length){ int t=number[k]; int i; for(; k*2+1 < length; k=i){ i=k*2原创 2014-07-31 21:07:18 · 1150 阅读 · 0 评论 -
求最小的k个数
和快速排序有点类似,利用快速排序的划分算法, 划分算法见http://blog.csdn.net/buyingfei8888/article/details/8997803 根据int partition(int number[],int start,int end);返回值为数组下标,大小为index,index左边值均小于number【index】,右边均大于number【index】,若原创 2014-07-31 15:39:19 · 922 阅读 · 0 评论 -
直接插入排序
插入排序 工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间 算法复杂度 把n个元素的序列升序排列,那么采用插入排序存在最好情况和最坏情况。最好情况就是,序列已经是升序排列了,在这种情况下,需要进行的比较操作需(n-1)次即可。最坏情况就是,序列是降序排列,那么此时原创 2013-05-30 10:42:48 · 1247 阅读 · 0 评论 -
归并排序
归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。 例如有两个有序表:(7,10,13,15)和(4,8,19,20),归并后得到的有序表为:(4,7,8,10,13,15,19,20)。 代码: #include using namespace std; void mergearra原创 2014-08-01 14:54:17 · 1080 阅读 · 0 评论 -
希尔排序
希尔排序是基于插入排序的以下两点性质而提出改进方法 希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。 #include #include //进行哈希排序 void shellsor原创 2013-05-30 16:08:40 · 1204 阅读 · 0 评论