快速排序的思路:
以数组的第一个元素作为基准,根据这个基准值去数组中找位置,也就是根据循环判断,当右查找结束,如果还未left==right则执行左查找,直至left==right则基准值的位置确定。
并根据该位置来进行左排序和右排序。
代码:
import java.util.*; public class Solution { public int findKth(int[] a, int n, int K) { quicksort(a,0,n-1); return a[n-K]; } //分割点 public int Partition(int left,int right,int []a){ int standard=a[left]; while(left<right){ //这里该注意的一个点,是数组内的互换,而不是与基准值standard的互换。 while(left<right&&standard<=a[right]) right--; swap(a,left,right); while(left<right&&standard>=a[left]) left++; swap(a,left,right); } return left; } //数组排序 public void quicksort(int []a ,int left,int right){ if(left<right){ int mid=Partition(left,right,a); //根据分割点来排序 quicksort(a,left,mid-1); quicksort(a,mid+1,right ); } } public void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } }