找第K大的数

来源:互联网 发布:怪物猎人激活码淘宝 编辑:程序博客网 时间:2024/05/01 20:27
#include <stdio.h>void swap(int * lvar, int * rvar){int tmp = *lvar;*lvar = *rvar;*rvar = tmp;}int select(int * arr, int length, int k){int begin = 0, end = length - 1;int key , lpos;do{if(begin < 0 || end >= length || begin > end){printf("Data error!\n");return -1;}key = arr[end];lpos = begin - 1;for(int i = begin; i <= end; i++){if(arr[i] < key){lpos++;swap(arr + lpos, arr + i);}}swap(arr + lpos + 1, arr + end);if(k < lpos + 1)end = lpos;else if(k > lpos + 1)begin = lpos + 2;}while(k != lpos + 1);return arr[k];}int main(){int arr[] = {0,1,2,-1,-4,-5};int num = select(arr, sizeof(arr) / sizeof(int), 5);printf("%d\n", num);}