找到数组中排序为第K的值 快速选择算法
基于快排实现,时间复杂度为O(n)
```
public static int quick_move(int[] nums,int left,int right){
int num=nums[left]; //初始值
int count=0; //count等于0表示目前空位置在左边,等于1表示空位在右边
while(left<right){
if(count==0){
if(nums[right]>=num){
right--;
}
else{
nums[left]=nums[right];
count=1;//转移空位
}
}
if(count==1){
if(nums[left]<=num){
left++;
}
else{
nums[right]=nums[left];
count=0;
}
}
}
if(count==1){
nums[right]=num;
return right;
}
else{
nums[left]=num;
return left;
}
}
public static void quick_find(int nums[],int k){
//初始状态
int left=0;
int right=nums.length-1;
while(left<right-1){
System.out.println(left+" "+right);
int index=quick_move(nums,left,right);
System.out.println(Arrays.toString(nums));
if(index==k){
System.out.println(nums[k]);
break;
}
else if(index<k){
left=index+1;
}
else{
right=index-1;
}
}
System.out.println(nums[k]);
}
```

浙公网安备 33010602011771号