非堆排序实现,利用快速排序思想实现的快速选择
package algorithm;public class Test {public int quickSelect(int nums[], int left, int right, int k){if (left == right) return nums[left];int i = left - 1, j = right + 1, x = nums[left];while (i < j){do i++; while (nums[i] < x);do j--; while (nums[j] > x);if (i < j){int tmp = nums[i];nums[i] = nums[j];nums[j] = tmp;}}int lenL = j - left + 1;if (lenL >= k) return quickSelect(nums, left, j, k);else return quickSelect(nums, j + 1, right, k - lenL);}public static void main(String[] args) {int[] nums = new int[]{0, 1, 0, 3, 12};Test test = new Test();System.out.println(test.quickSelect(nums, 0, nums.length - 1, 3));}
}
图示: