1 找出数组最小的k个数## 标题 ##
@1;最简单也最直观的解法。对数组排序,顺序输出前k个数字。最快的是利用快排,时间复杂度为o(nlogn);
@2:利用快排中的partition ,该函数的思想为划分数组为两部分 左半部小于枢纽值,右半边大于枢纽值。利用该算法,可以得出本题的算法我们可以把最终的low值定位在 第k-1的位置。代码如下。
void mypartition(data[],int low,int high,int k)
{
int pivot=0;
while(pivot!=k-1)
{
pivot=partition(data,low,high);
if(pivot<k-1)
pivot=partition(data,pivot+1,high);
else
pivot=partition(data,low,pivot-1);
}
for(int i=0;i<k;i++)
printf("%d",data[i]);
putchar("\n");
}