剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
来源:互联网 发布:冰动娱乐 知乎 编辑:程序博客网 时间:2024/04/28 02:28
快速排序的思想可以运用到很多情况,如,还可以用来实现,
1. 在长度为N的数组中,查找第K大的数字,
2.数组中出现次数超过一半的数字。
3.最小的K个数字。
等
快速排序算法的递归实现:void swap(int *a,int *b){ int c; c=*a; *a=*b; *b=c;}int Partition(int data[],int length,int start,int end){ int i; i= RandomInRange(start,end); swap(&data[i],&data[end]); int small;//计数左侧的数据个数 small = start-1; for(i=start;i<end;i++) { if(data[i]<data[end]) { small++; if(small!=i) swap(&data[i],&data[small]); } } small++; swap(&data[end],&data[small]); return small;}void quickSort(int data[],int length,int start,int end){ if(start==end) return; int index; index = Partition(data,length,start,end); if(index>start) quickSort(data,length,start,index-1); if(index<end) quickSort(data,length,index+1,end);}对公司员工的年龄排序,复杂度为N。void sortAges(int ares[],int length){ int i,j,index; int numOfAges[100]={0}; if(ages==NULL) return; for(i=0;i<length;i++) { if(ages[i]>99||ages<0) throw new std::exception(); numOfAges[ages[i]]++; } index = 0; for(i=0;i<100;i++) { for(j=0;j<numOfAges[i];j++) { ages[index++]=i; } }}面试题八:旋转数组的最小数字。
<pre name="code" class="objc">int MinInOrder(int numbers[],int index1,int index2){int result,i;result = numbers[index1];for(i=index1+1;i<=index2;i++){if(result>numbers[index1])result = numbers[index1];}return result;}int Min(int *numbers,int length){int index1 = 0;int index2 = length-1;int indexMid=0;if(numbers==NULL||length<=0) {throw new std::exception("invalid parameters.");}while(numbers[index1]>=numbers[index2]){if(index2-index1==1){indexMid= index2;break;}indexMid=(index1+index2)/2;if(numbers[index1]==numbers[index2]&&numbers[index2]==numbers[indexMid])return MinInOrder(numbers,index1,index2);if(numbers[index1]<=numbers[indexMid])index1 = indexMid;else if(numbers[index2]>=numbers[indexMid])index2 = indexMid;}return numbers[indexMid];}
0 0
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 剑指offer:(6)查找和排序:旋转数组中的最小值
- 《剑指offer》---两个队列来实现栈 和 O(n)时间内对年龄排序
- 快速排序 数组+递归实现
- LintCode-剑指Offer-(159)寻找旋转排序数组中的最小值
- LintCode-剑指Offer-(28)寻找旋转排序数组中的最小值
- 递归实现快速排序
- 快速排序+递归实现
- 递归实现快速排序
- 快速排序--递归实现
- 递归实现快速排序
- 剑指offer 2.4 在O(n)时间排序公司所有员工的年龄
- 【算法】快速排序算法(递归实现 从小到大排列) 排序范围(0~n-1) n为数组元素个数
- 二分查找算法递归实现&&快速排序算法实现
- java实现通过快速排序来查找数组中第n大的元素
- 每日AC-剑指Offer -旋转数组查找最小值
- 实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)
- 实现一个算法,对公司员工年龄进行排序,时间效率要求O(n)
- 符号重载函数 友元函数
- Lisp简明教程
- JavaWeb学习之HibernateDaoSupport使用
- 符号重载函数
- html在线学习网站
- 剑指offer--快速排序递归实现,年龄排序O(N)实现,旋转数组最小值查找
- 【bzoj1067】【SCOI2007】【降雨量】【线段树+分类讨论】
- rest接口设计之--返回值设计
- Gradle DSL method not found: 'android()'
- Android中Service(服务)详解
- Android图片压缩工具类
- 响应式布局
- Android实现天气预报(中国天气网)
- 一文搞懂HMM(隐马尔可夫模型)