快速排序搜索一个数组中第N大的数字

来源:互联网 发布:如何淘宝知识产权投诉 编辑:程序博客网 时间:2024/06/04 21:17
#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
阅读全文
0 0
原创粉丝点击