import java.util.Random;public class Main {//时间复杂度,即步骤数public static int sum =0;public static void main(String[] args) {//随机获取一个数组int[] array = getArrya(10000);//quickSort(array, 0, array.length-1);int k = 35;findKMin(array, 0, array.length-1, k);for(int i=0;i<k;i++){System.out.print(array[i]+" ");}System.out.println("\nsum="+sum);}//快速排序public static void quickSort(int[] array,int begin,int end){if(begin<end){int mid = adjustArray(array, begin, end);sum+=end-begin;quickSort(array, begin, mid-1);quickSort(array, mid+1, end);}}//找第K小的值或者前K小的值public static void findKMin(int[] array,int begin,int end,int k){k=k-1;int b = begin;int e = end;int t = 0;do{int index = adjustArray(array, b, e);if(index==k){break;}else if(index<k){b = index+1;}else{e = index-1;}}while(true);}//快速排序的调整public static int adjustArray(int[] array,int begin,int end){int i = begin;int j = end;int k = array[i];sum+=end-begin;while(i<j){while(i k) j--;array[i++]=array[j];while(i<j && array[i] <= k) i++;array[j--] = array[i];}array[i]=k;return i;}public static int[] getArrya(int n){Random rd = new Random();int max = 10*n;int[] array = new int[n];for(int i=0;i<n;i++){array[i]=rd.nextInt(max);}return array;}}
java快排,找第K小的数,找前K个数
最新推荐文章于 2024-08-20 13:59:19 发布