巧妙利用快速排序法的原理求乙個陣列中的第10大元素

2021-10-07 12:50:59 字數 774 閱讀 2752

實際上可以拓展到不全部排序而求某個位置的數。因為快排每趟都會確定乙個數的最終位置,並且返回這個數的下標。利用這個性質來求。

//快速排序法

int

quicksort_process3

(int

*a,int low,

int high)

a[h]

= temp;

return h;

}void

quicksort3

(int

*a,int low,

int high)

}int

gettop_n_numbers

(int

*a,int n)

while(!

(e<=n&&e>=1)

);pos = n - e;

/*在乙個從小到大排序的陣列中,最大第e個數的下標恰好是n-e*/

curpos =

quicksort_process3

(a,0

, n -1)

;/*一趟快排結束時,肯定會有乙個已經確定了位置的數,返回它的下標*/

while(1

)else

if(curpos < pos)

else

}return pos;

}void

show_topn_numbers

(int

*a,int n)

乙個快速法求素數的程式

閒暇時寫了乙個找出小於某個數字的素數的程式。最常見的方法是篩選法吧。原理大致如下 若要求得16以內的所有素數,1 在陣列中存放一下資料 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 2 先篩選掉是2的倍數 2 3 4 5 6 7 8 9 10 11 12 13 14 15...

就乙個快速排序。。。

話說,每次寫題的時候我都是呼叫stl的sort,自己卻還是很難快速寫出乙個快排。正好作業布置這個了。就寫一下,熟練一下,順便背一下記住。萬一以後面試問到了,也可以秒了。include include include using namespace std const int maxn 10000 5...

乙個快速排序的小技巧

最近在設計的 中有這麼乙個要求,有一堆字串,如 a 1 a 3 a 5 a 2 假設字首都是a,並且中括號中的數值沒有重複 現在要用程式將可以合併的陣列都合併起來,變成 a 1.3 a 5 那麼我想到的辦法是這樣的,將中括號中的數字提取出來,放在乙個list中,然後對list排序,也就是說上述資料排...