第k个小的数,利用分治法
// 程序8-2-2-1.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <stdlib.h>
int partition(int data[], int start, int end)
{
int X = data[start];
while(start < end)
{
while(start < end && data[end] >= X) end--;
data[start] = data[end];
while(start < end && data[start] <= X) start++;
data[end] = data[start];
data[start] = X;
}
return start;
}
int select_kth_value(int data[], int start, int end, int k)
{
if(data == NULL || start > end || k < 0 ||end-start+1 < k)
{
exit(-1);
return 0;
}
int index = partition(data,start,end);
if(index == k) return data[k];
else if (index > k)
return select_kth_value(data, start, index-1, k);
else
return select_kth_value(data, index+1, end, k);
}
int _tmain(int argc, _TCHAR* argv[])
{
int data[] ={ 7, 2 };
int k = 2;
int value = select_kth_value(data, 0, sizeof(data)/sizeof(int)-1, k-1);
printf("the kth number is %d\n", value);
return 0;
}