zoukankan      html  css  js  c++  java
  • 分治法寻找第k大的数

    利用快速排序的思想·去做

    #include<iostream>
    using namespace std;
    int FindKthMax(int*list, int left, int right, int k);
    int main(){
    int i,n,k;
    while (cin >> n){
    int *a = new int[n];
    for (i = 0; i < n; i++)
    cin >> a[i];
    cin >> k;
    cout << FindKthMax(a, 0, n - 1, k) << endl;
    }
    return 0;
    }
    int FindKthMax(int*list, int left, int right, int k){
    int key = list[left];
    int low = left, high = right;
    while (low < high){
    while (list[high]>=key&&high > low)
    high--;
    list[low] = list[high];
    while (list[low]<=key&&high>low)
    low++;
    list[high] = list[low];
    }
    list[low] = key;
    /*实现一次快速排序*/
    int l = right - low + 1;
    if (l == k) //若key处恰好为第k大数,直接返回
    return key;
    else if (l < k)
    /*l<k说明第k大数在key左边序列中,此时为第k-l大的数*/
    FindKthMax(list, left, low - 1, k - l);
    else
    /*l>k说明第k大的数在右边序列中,位置还是第k大的数*/
    FindKthMax(list, low + 1, right, k);
    }

  • 相关阅读:
    Python电影投票系统
    Python打印一个等边三角形
    打印正直角三角形
    MySQL指令
    MySQL安装 8.0.15版本
    局部变量 全局变量
    目录
    格式化输出
    转义字符
    ffmpeg 从内存中读取数据(或将数据输出到内存)
  • 原文地址:https://www.cnblogs.com/td15980891505/p/4451727.html
Copyright © 2011-2022 走看看