题解 | #寻找第K大#
寻找第K大
http://www.nowcoder.com/practice/e016ad9b7f0b45048c58a9f27ba618bf
快速排序的思路:
以数组的第一个元素作为基准,根据这个基准值去数组中找位置,也就是根据循环判断,当右查找结束,如果还未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;
}
}
查看9道真题和解析