快速排序搜索一个数组中第N大的数字
2017-10-27 16:56
274 查看
#include <iostream> #include "SortTestHelper.h" using namespace std; template <typename T> int __partition(T arr[], int l, int r) { swap( arr[l], arr[rand()%(r-l+1) + l] ); T v = arr[l]; int j = l; for (int i = l+1; i <= r; ++i) { if(arr[i] < v) { j++; swap(arr[j], arr[i]); } } swap(arr[j], arr[l]); return j; } template <typename T> void __quickSort(T arr[], int l, int r, int target) { if( l >= r) return; int p = __partition(arr, l, r); //arr[p]就是第p大的数据 if (p == target) { return; } else if(target > p) { __quickSort(arr, p+1, r, target); } else { __quickSort(arr, l, p-1, target); } } template <typename T> void quickSort(T arr[], int n, int target) { srand(time(NULL)); __quickSort(arr, 0, n-1, target); } int main() { srand(time(NULL)); int target = 7;//数组中需要查找顺序的所以,比如第6大的数据target = 5 int arr[8] = {2,13,8,7,7,5,4,10}; quickSort(arr, 8, target); int res = arr[target]; SortTestHelper::printArray(arr, 8); cout << "res: " << res; return 0; } output: 4 2 5 7 7 8 10 13 res: 13
相关文章推荐
- 消除原理____假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(qosrt 快速排序 哈希)
- 假设数组中有一个数字出现的次数超过了数组长度的一半,试编程找出这个数字(消除 qosrt 快速排序 哈希)
- 求一个数字在数组中排序,顺序搜索
- 在排序好的数组插入一个数字,数字要插入到合适的位置上
- 合法IP&窗口最大值数组&打印素数&递归逆序一个栈&栈排序另一个栈&MyString&寻找数组中出现的重复字符&数组中的重复数字&逆序打印链表&空格替换成%20
- C++将一串数字放到一个数组里随机排序
- 《剑指offer》- 统计一个数字在排序数组中出现的次数
- 统计一个数字在排序数组中出现的次数
- 在旋转之后的已排序数组中查找一个数字
- 剑指offer-统计一个数字在排序数组中出现的次数-PHP
- 输入一个递增排序的数组和一个数字s,在数组中寻找两个数,使得这两个数的和为s
- 输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。
- JavaScript数组的快速克隆(slice()函数)和数组的排序、乱序和搜索(sort()函数)
- 【c语言】统计一个数字在排序数组中出现的次数
- 求一无序数组中第n大的数字 - 快速选择算法
- 每天学习一算法系列(14) (输入一个已经按升序排序过的数组和一个数字,在数组中查找两个数,使得它们的和正好是输入的那个数字)
- 一个一维整形数组,若干个数字,统计数组中不同的数字出现的次数,并按照出现频率从小到大排序输出,相同频率按数字大小排序输出
- 在一个排序数组中,输出给定数字出现的次数
- 14.输入一个已经按升序排序过的数组和一个数字, 在数组中查找两个数,使得它们的和正好是输入的那个数字。
- 统计一个数字在排序数组中出现的次数(二分法)