最小的k个数
Posted zhangxiaoyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了最小的k个数相关的知识,希望对你有一定的参考价值。
输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
快排序的思想就是把a[begin] 交换到它属于的第k位
- 利用快速排序划分的思想,每一次划分就会有一个数字位于以数组从小到达排列的的最终位置index;
- 位于index左边的数字都小于index对应的值,右边都大于index指向的值;
- 所以,当index > k-1时,表示k个最小数字一定在index的左边,此时,只需要对index的左边进行划分即可;
- 当index < k - 1时,说明index及index左边数字还没能满足k个数字,需要继续对k右边进行划分;
public ArrayList<Integer> GetLeastNumbers_Solution(int [] input, int k) { if(input == null) return null; ArrayList<Integer> list = new ArrayList<Integer>(k); if(k > input.length) return list; int low = 0; int high = input.length - 1; int index = partition(input,low,high); while(index != k-1){ if(index > k-1){ high = index - 1; }else{ low = index + 1; } index = partition(input,low,high); } for(int i = 0; i < k; i++){ list.add(input[i]); } return list; } //划分操作 public int partition(int[] array,int start,int end){ int pivot = array[start]; while(start < end){ while(start < end && array[end] >= pivot) end--; if(start<end) array[start++] = array[end]; while(start < end && array[start] <= pivot) start++; if(start<end) array[end--] = array[start]; } array[start] = pivot; return start; }
以上是关于最小的k个数的主要内容,如果未能解决你的问题,请参考以下文章