java快排,找第K小的数,找前K个数

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;}}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值