您的位置:首页 > Web前端

剑指offer之最小的k个数

2015-06-09 13:03 267 查看
题目(剑指offer面试题30):

输入n个整数,找出其中最小的k个数。例如输4、5、1、6、2、7、3、8这8个数,则最小的4个数为1、2、3、4。

分析:

可以利用快速排序算法Partition来解决,如果是基于第k个数来调整数组,那么调整后的数组的左边的数字都小于第k个数,右边都的数字都大于第k个数,这样的结果是左边的k个数字就是要找的最小的k个数字。

代码:

void GetLeastNumbers(int * input,int n,int* output,int k)

{

if(input == NULL || output == NULL || k > n || n <= 0 || k <= 0)

return ;

int start = 0;

int end = n -1 ;

int index = Partition(input,n,start,end);

while(index != k-1)

{

if(index > k-1)

{

end = index -1 ;

index = Partition(input,n,start,end);

} else {

start = index + 1;

index = Partition(input,n,start,end);

}

}

for(int i=0; i< k ; i++)

output[i] = input[i];

}

采用这种算法的限制就是输入的数组被改变了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: