求最小的第K個數

2021-09-23 22:43:57 字數 869 閱讀 7561

演算法分析:除了排序。大小堆,還可以用排序的演算法。

我們每次以乙個基準元素進行快速排序,排序完之後,看這個基準元素的位置是否為k位置,如果大於k,那麼說明第k 小的元素在基準元素的左邊。然後從右邊選取基準元素進行快排。如果小於k,演算法相反

#include

#include

#include

#include

using namespace std;

void quicksort(vector &vec, int start, int end,int &keynum)

int key = vec[start];

int left = start;

int right = end;

while (left < right)

vec[left] = vec[right];

while (left < right && key >= vec[left])

vec[right] = vec[left];

}vec[left] = key;

keynum = left;

}int getkmin(vector &vec,int knum)

if (key > knum - 1)

}return vec[key];

}int main()

;srand((unsigned)time(null));

for (int i = 0; i < 10; i++)

vecint.push_back(intarr[i]);

cout << getkmin(vecint, 5) << endl;

system(「pause」);

return 0;

}

求最小的K個數

方法一 利用快排的思想,複雜度為o n class solution input low pivot return low vector getleastnumbers solution vector input,int k else vector res input.begin input.beg...

N個數,求第K大數

有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,這個數左邊都比它大,右邊都比他小...

N個數,求第K大數

今天同學給我出了一道題是這樣的 有n個不重複的數,這n個數可以放入記憶體中,讓你用最快的方法找到第k大的數。解答 一般情況我們可能考慮,先將n個數排序 快排序 堆排序 然後可以得到結果。但是當n很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,...