一、找到序列中第k小的数
#include<stdio.h>
void select_rank_k(int array[], int low, int high, int k, int* k_value){
int left = low;
int right = high;
int pivot = array[low];
int pivot_pos;
while (left != right){
while (array[right] >= pivot && left < right){
right--;
}
array[left] = array[right];
while (array[left] <= pivot && left < right){
left++;
}
array[right] = array[left];
}
array[left] = pivot;
pivot_pos = left;
if (pivot_pos == k - 1) {
*k_value = pivot;
return;
}else if (pivot_pos > k - 1){
select_rank_k(array, low, pivot_pos - 1, k, k_value);
}else{
select_rank_k(array, pivot_pos + 1, high, k, k_value);
}
}
int main(){
int n, k;
scanf("%d %d", &n, &k);
int nums[n];
for (int i = 0; i < n; i++){
scanf("%d", &nums[i]);
}
int k_value;
select_rank_k(nums, 0, n - 1, k, &k_value);
printf("%d", k_value);
return 0;
}