1. 程式人生 > >第k小的元素

第k小的元素

turn 元素 class main 利用 span -- 從大到小 向量

利用快排思想,如果標誌位大於k,則第k小的數字在左邊,否則在右邊。(程序是第k大的元素)

#include <iostream>
#include <vector>
using namespace std;

//求向量中第k大的數字,從大到小進行排列

int q_sort(vector<int> &v, int low, int high)
{
    int tmp = v[low];
    
    while (low < high)
    {
        while (low<high && v[high] <= tmp)
            
--high; v[low] = v[high]; while (low<high && v[low] >= tmp) ++low; v[high] = v[low]; } v[low] = tmp; cout << low << endl; for (auto &i : v) cout << i << " "; cout << endl; return low; }
int k_max(vector<int> &v, int low, int high,int k) { if (low >= high) return v[low]; else { int mid = q_sort(v, low, high); if (mid>k) k_max(v, low, mid - 1,k); else if (mid < k) k_max(v, mid + 1, high,k);
else return v[mid]; } } int main() { vector<int> v = { 78, 23, 64, 1, 35, 98, 45, 61, 32, 845, 223 }; int len = v.size(); int k_num=k_max(v, 0, len - 1, 3-1); //此處為k-1,從大到小的排列,下標為k-1的數。 cout << k_num << endl; return 0; }

第k小的元素