标签:
寻找最小的k个数例如输入1,2,3,4,5,6,7和8这8个数字,则最小的4个数字为1,2,3和4。
算法1:直接排序,找到最小的k个数
算法2:将数组a中的前k个数放到数组b中,在将a中后面n-k个数的值与b中最大的数比较,如果a中的数更小,将a中的这个数与b中的最大数交换,当然也可以将b建成一个最大堆
代码:
/** 查找最小的k个元素 ** author :xiaozhi xiong ** date:2014-02-11 **/ #include "stdio.h" #include "string.h" #include "stdlib.h" #include "stdio.h" #include "string.h" #include "stdlib.h" void FindKMin(int *a1,int len_a,int *b1,int len_b) { int i; int j; int *temp; int *a; int *b; a=a1; b=b1; if(len_a<len_b||len_a<0) { printf("输入有误\n"); return; } for(i=0;i<len_b;i++) { *b=*a; b++; a++; } for(i=len_b;i<len_a;i++) { b=b1; for(j=0;j<len_b;j++)//找到b中最大的数 { if(j==0) { temp=b; } else { if(*temp<*b) temp=b; } b++; } if(*temp>*a) { *temp=*a; } a++; } } int main(void) { int a[10]={2,5,99,7,4,1,21,65,96,32 }; int i; int min_k[5]; printf("查找最小的k个值\n"); FindKMin(a,10,min_k,5); printf("查找到的最小k个值\n"); for(i=0;i<5;i++) { printf("%d ",min_k[i]); } getchar(); return 0; }
标签:
原文地址:http://blog.csdn.net/jxxiongxiaozhi/article/details/43731909