快速排序算法:每次找到元素在有序数组中的最终位置(前面的数都比它小,后面的数都比它大)。因此,在算法中,将比第K大数小的都放在它的前面,大的放后面,有效快速找出目标数。 时间复杂度接近于O(N) public class Qksort { public static void main(String[] args) { int[] nums = new int[]{7,9,8,0,1,3,5,2,4}; for(int i: nums) System.out.print(i + " "); select(nums, 0, nums.length-1, nums.length/2); //找出中值 System.out.println("/nThe mid number is : " + nums[nums.length/2]); qksort(nums, 0, nums.length-1); for(int i: nums) System.out.print(i + " "); } static void qksort(int[] nums, int l, int r) { //递归版本快速排序 if(l>=r) return; int m = partition(nums, l, r); qksort(nums, m+1, r); qksort(nums, l, m-1); } static int partition(int[] nums, int l, int r) { //每次调用都会定位最后一个元素的最终位置 int i=l-1,j=r; int temp = nums[j]; int sign; while(true) { while(nums[++i]<temp); while(nums[--j]>temp) if(i == j) break; if(i >=j) break; //在交换前判断退出条件 sign = nums[i]; nums[i] = nums[j]; nums[j] = sign; } nums[r] = nums[i]; nums[i] = temp; return i; } static void select(int[] nums, int l, int r, int k) { //找出第K大元素 int m = partition(nums, l, r); if(m == k) return; if(m<k) select(nums, m+1, r, k); if(m>k) select(nums, l, m-1, k); } }