给定n个元素的整数数列,找出第K小的数来。 #include <stdio.h> void swap(int *a,int *b); int select_Ks_small(int a[], int left, int right, int k){ int i,j,pivot; if(left >=right){ /*递归结束*/ return a[left]; } pivot = a[left]; i = left + 1; j = right; while(1){ /*用快速排序策略进行定位交换*/ while(a[i] < pivot && i++); while(a[j] > pivot && j--); if(i >=j ){ break; } swap(&a[i], &a[j]); } if(j - left + 1 == k) { /*终于找到所求*/ return pivot; } a[left] = a[j]; a[j] = pivot; if(j - left + 1 < k){ /*在右边查找*/ return select_Ks_small(a, j+1, right, k-j-1+left); }else{ /*在左边查找*/ return select_Ks_small(a, left, j - 1,k); } } void swap(int *a, int *b){ int t = *a; *a = *b; *b = t; } int main(){ int a[] = {2,4,5,6,7,8}; printf("K small element is:%d/n",select_Ks_small(a,0,5,6)); getch(); return 0; }