您的位置:首页 > 其它

快速排序搜索一个数组中第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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  快速排序 搜索
相关文章推荐