排序算法
NeoTDX
这个作者很懒,什么都没留下…
展开
-
归并排序
//归并算法//主要分两个部分,第一步是分解,拆分到每组只剩下一个,第二步是合并,保持归并之后组内有序。运用递归。void MergeSort(int arr[],int head,int area){ if (head<area) { int min=(head+area)/2; MergeSort(arr, head, min); M原创 2015-07-13 10:32:09 · 263 阅读 · 0 评论 -
快速排序
//快速排序//十分重要的算法//先找到起始数的位置,这个位置将数组分为两部分,第一部分都比起始数小,第二部分都比它大,继而再将每一部分找位置,直到每一部分仅有剩下一个。是采用了一种分治的思想,用递归实现比较方便。找位置,先从右边找第一个比初始位置小的,把小的交换过来,再从左边找比初始位置大的,把大的交换过来,直到首尾指针相同,第一个数的位置就找到了。进而进行递归。void Quick原创 2015-07-13 10:36:26 · 277 阅读 · 0 评论 -
选择排序
//选择排序//从小到大的,每次从剩下中选择最小的和首位进行交换,首位每次位置增加一个。这是一个不稳定算法void SelectionSort(int arr[],int length){ for(int i=0;i<length;i++) { int min=i; for (int j=i; j<length; j++) {原创 2015-07-13 10:39:35 · 241 阅读 · 0 评论 -
剑指offer——二维数组查找
题目:每一行,每一列都是递增的解决:每次找右上角,如果比number大,列减一,如果比number小,行加一bool Find(int* matrix,int rows,int colums,int number){ int row=0; int colum=colums-1;//用一维表达二维,所以colums的值不能丢失,以便row增加后定位到我们要找到的右上角。原创 2015-07-08 16:56:17 · 385 阅读 · 0 评论 -
剑指off笔记——拷贝函数为什么不能是值传递
拷贝函数需要有一个临时变量,给这个临时变量赋值的时候会调用拷贝函数,这样就会不休止的递归调用,造成栈溢出。解决办法 是写成常量引用 (const 类名& 引用名)就没有那个临时变量了。原创 2015-07-08 16:00:39 · 288 阅读 · 0 评论 -
剑指off-给员工年龄排序
//题目给几万个员工的年龄排序,要求时间复杂度是O(n);//第一步先统计1-99,然后给arr重新赋值//这是计数排序?void AgesSort(int arr[],int length){ int oldest=99; int rangeold[100]={0}; for (int i=0; i rangeold[原创 2015-07-13 11:57:54 · 330 阅读 · 0 评论 -
冒泡排序
//冒泡排序//一对对的比较,把较大的交换到最后面,泡越来越大。注意内层循环的写j=0 to j=length-i-1;可以对冒泡进行一个改进增加一个标识,如果一趟没有交换就停止,说明数组已经有序。这个是一个稳定算法void BubbleSort(int arr[],int length){ for(int i=0;i<length;i++) { for (i原创 2015-07-13 10:40:22 · 279 阅读 · 0 评论 -
插入排序
//插入排序//分为两个组,第一组是有序组,第二组是剩下的组,每次从第二组取出一个插入到第一组//这是一个稳定排序,不用额外的存储空间void InsertSort(int arr[],int length){ for(int i=1;i<length;i++) { int j=i; int temp=arr[j]; whil原创 2015-07-13 10:40:54 · 296 阅读 · 0 评论