package sort;
import java.util.Arrays;
public class QuikSort {
public static int[] quickSort(int[] arr) {
int length = arr.length;
sort(arr, 0, length - 1);
return arr;
}
public static void sort(int[] arr, int left, int right) {
if (left > right) {
return;
}
int index = partation(arr, left, right);
sort(arr, left, index - 1);
sort(arr, index + 1, right);
}
public static int partation(int[] arr, int left, int right) {
int temp = arr[left];
int i = left + 1;
int j = right;
while (true) {
while (arr[i] <= temp && i < right) {
i++;
}
while (arr[j] >= temp && j > left) {
j--;
}
if (i >= j)
break;
swap(arr, i, j);
}
swap(arr, left, j);
return j;
}
public static void swap(int[] arr, int i, int j) {
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
public static void main(String[] args) {
int[] arr = { 3, 6, 9, 2,10, 8, 67, 7, 1 };
//System.out.println(Arrays.toString(quickSort(arr)));
findK(arr,5);
System.out.println(Arrays.toString(arr));
}
/*********************************************************************************************/
// 寻找第K小元素或者说前k小的元素
public static void findK(int[] arr, int k) {
int length = arr.length;
int i = 0;
int j = length - 1;
int index = partation(arr,i,j);
while((index!=k-1)){
if(index<k-1){
index =partation(arr,index+1,j);
}else{
index = partation(arr,i,index-1);
}
}
System.out.println(arr[k-1]);
}
// 寻找第K小元素或者说前k小的元素
public static void findK2(int[] arr, int k) {
int length = arr.length;
int i = 0;
int j = length - 1;
int[] output = new int[k];
while(j>i){
int position= partation(arr,i,j);
if(position==k){
System.out.println(arr[k]);
//return arr[k-1];
}else if(position<k){
i = position+1;
}else{
j= position-1;
}
}
//这里的K是数组的K,而不是第k个要减一
System.out.println(arr[k]);
// return arr[k-1];
}
}