思想:快排的思想就是每排一次,就会把一个数(也就是我们选定的那个key)放到它在这个序列中正确的位置,所以每排一次就返回这个数所在下标看它是不是我们所要找的那个数(对应下面代码的ret是否等于size-k)
#include <iostream> #include <vector> int QuockSort(int* array, int size, int k,std::vector<int>& vtmparr) { int first = 0; int last = size - 1; int key = 0; int i = 0; for (; i < vtmparr.size(); ++i){ if (key == vtmparr[i]){ ++key; i = 0; } } first = key; int tmp = array[key]; while (first <= last){ while (first <= last && array[last] >= tmp){ --last; } if (first <= last){ std::swap(array[key], array[last]); key = last; } while (first <= last && array[first] <= tmp){ ++first; } if (first <= last){ std::swap(array[key], array[first]); key = first; } } return key; } int NumOfKMax(int* array,int size,int k,std::vector<int>& vtmparr) { static int i = 0; int ret = -1; while (ret != size - k){ ret = QuockSort(array, size, k,vtmparr);//ret为下标为ret的数据到达正确的位置 vtmparr.push_back(ret); } return array[ret]; } int main() { int array[7] = {4,8,2,3,6,7,0}; std::vector<int> vtmparr; int k = 7; int num = NumOfKMax(array,sizeof(array)/sizeof(array[0]), k,vtmparr); std::cout << num << std::endl; system("pause"); return 0; }
《完》
本文出自 “零蛋蛋” 博客,谢绝转载!
原文地址:http://lingdandan.blog.51cto.com/10697032/1836881