演算法分析:除了排序。大小堆,還可以用排序的演算法。
我們每次以乙個基準元素進行快速排序,排序完之後,看這個基準元素的位置是否為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很大時這樣做的效率會很低。所以我們提出一種更高效的方法 利用快速排序的特點 第一遍排序會確定乙個數的位置,...