#include <stdio.h>
#include <stdlib.h>
#include <string.h>
void swap(int* arr, int i, int j)
{
int x = arr[i];
arr[i] = arr[j];
arr[j] = x;
}
/* 快排的partion函数,把arr[r]放到了i+1位置*/
int partion(int* arr, int p, int r)
{
int x = arr[r];
int i = p - 1;
int j = p;
for (; j < r; j++)
{
if (arr[j] < x)
{
i++;
swap(arr, i, j);
}
}
swap(arr, i + 1, r);
return i + 1;
}
/*查找 p--r范围内,排名第i的数据*/
int find_the_xxth_data(int* arr, int p, int r, int i)
{
int q = partion(arr, p, r);
printf("arr[%d]= %d\n", q,arr[q]);
/*arr[r]当前是第k名*/
int k = q - p + 1;
if (k == i) return arr[q];
if (i < k)
{
return find_the_xxth_data(arr,p,q-1,i);
}
else
{
return find_the_xxth_data(arr, q + 1, r, i - k);
}
}
void test_find()
{
/*0位置不参与*/
int arr[] = { -1,9,7,5,3,1 };
int length = sizeof(arr) / sizeof(arr[0]) - 1;
int data = find_the_xxth_data(arr,1, length, 4);
printf("4th data is %d \n", data);
}
int main()
{
test_find();
return 0;
}
03-27
387
09-27
460