快排思想求给定序列中第k大的数
2016-08-11 14:43
393 查看
思想:快排的思想就是每排一次,就会把一个数(也就是我们选定的那个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; }
《完》
相关文章推荐
- 算法之排序算法的算法思想和使用场景总结
- JavaWeb框架MVC设计思想详解
- 思想:从选择博客说起(2)
- 思想:CoreMVC是什么(3)
- 思想:思想究竟是什么(4)
- 思想:CoreMVC为什么只有一个文件(5)
- 思想:程序员的上下文(6)
- 思想:分析文档是什么(8)
- 思想:分析文档使用YAML格式如何(9)
- 思想:CoreMVC核心文件适合放哪里(10)
- 思想:追求简单(11)
- 思想:学习YAML语法(12)
- 思想:脚手架模块的开发过程(13)
- 思想:gzcompress和gzdeflate的区别(15)
- QuickSort快排详细解释
- 快排
- Dijkstra算法原理及其优化
- 文明的演化与管理思想
- 信息化时代的思想方法变革