编程之美---寻找最大的K个数
来源:互联网 发布:web前端和java哪个好 编辑:程序博客网 时间:2024/05/01 20:57
问题详见《编程之美》
其基本思想是在达到目的的前提下,尽量地减少排序、选择的工作量
解法二code
/*在一组数中寻找k个较大的数*/#include <stdio.h>#include <stdlib.h>#define A 10int s[A]={10,2,34,4,5,-1,36,73,8,92};int k=4;void swap(int s[],int l,int m)//交换数据确立边界{int temp;temp=s[l];s[l]=s[m];s[m]=temp;return;}/*数组分割函数---基本思想是快速排序法输入参数:@s 等待分配的数组@l 数组的左边界@r 数组的右边界 @k 数组中s从l开始,期望分割出的左数组的大小*/void partition(int s[],int l,int r,int k)//二分组递归程序{int border;int i,j;int cntl=0,cntr=0;swap(s,l,(l+r)/2);border=s[l];i=l;j=r;while(i<j){while(i<j && s[j]<border){j--;cntr++;}s[i]=s[j];while(i<j && s[i]>=border){i++;cntl++;}s[j]=s[i];}s[i]=border;cntl++;if(cntl>k)//分组后若大数数量大于k值,则重分左边数组{partition(s,l,i,k);}else if(cntl<k)//分组后若大数数组小于k值,则重分右边数组{partition(s,i+1,r,k-cntl);}else{return;}}int main(void){int i;partition(s,0,A-1,k);printf("The k max value int set s are:\n");for(i=0;i<k;i++){printf("%d ",s[i]);}printf("\n");system("pause");return 0;}
0 0
- 编程之美系列之寻找最大的K个数
- 编程之美之2.5 寻找最大的K个数
- 编程之美之寻找最大的k个数
- 编程之美系列之寻找最大的K个数
- 《编程之美》 : 寻找最大的K个数
- 编程之美2.5 寻找最大的K个数
- 编程之美--寻找最大的K个数
- 编程之美 读书笔记(寻找最大的k个数)
- 编程之美 2.5 寻找最大的K个数(1)
- 编程之美2.5寻找最大的K个数
- 【编程之美】读书笔记:寻找最大的K个数
- 【编程之美】读书笔记:寻找最大的K个数[转帖]
- 编程之美——寻找最大的K个数
- 编程之美2.5 寻找最大的K个数
- 编程之美 2.5 寻找最大的K个数
- 编程之美-2.5寻找最大的K个数
- 编程之美-2.5寻找最大的K个数
- 编程之美—寻找最大的k个数
- Android:Layout_weight的深刻理解
- 产品测试研究
- javaweb之常用的EL表达式
- CSDN宣布完成A轮千万美元融资 宽带资本领投
- android的log抓取
- 编程之美---寻找最大的K个数
- Java程序员必知的8大排序
- 360兼容模式出现乱码问题
- 计算机专业研究生必读
- const用法总结(C++)
- 纸牌屋第一季
- java 强制转换问题中方法、变量调用问题(多态)
- 算法题目归纳
- 四川一大学女老师走红 外形清新靓丽被称翻版刘诗诗