找出数组中第k大小的数,输出数所在的位置。例如{2,4,3,4,7}中,第一大的数是7,位置在4。第二大、第三大的数都是4,位置在1、3随便输出哪一个均可。函数接口为:int find_orderk(const int* narry,const int n,const int k),要求算法复杂度不能是O(n^2)
按照选择排序或者冒泡排序每趟循环能找出一个最大或最小元素,那么只要K趟找到最K大元素,不过为了防止前面K大元素影响后面的排序,直接置为一个很小的整数(这里为INT_MIN即最小负整数),这算法还可求出第K大值复杂度为:k*2*n
程序如下:已验证
int find_orderk(const int *p, const int n, const int k)
{
int i;
int j;
int max_idx;
int max;
int min = INT_MIN;
int *temp;