日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

qsort、partition、第k小的數

系統 1894 0

qsort的每一趟中,選定pivot以后,partition的過程如下:

開始時,ptrLeft,ptrRight分別指向數組兩端;

*ptrLeft小于pivot時,向右走;*ptrRight大于pivot時,向左走;

ptrLeft和ptrRight都走不動的時候,交換對應的元素,繼續。

ptrLeft和ptrRight相遇的時候,結束這一趟,然后二分的對兩邊繼續qsort。

更新:這樣的做法需要處理各種特殊情況(略),因此更好的思路是:

partition 的時候,思路是:

1 ,將 pivot 放到序列末尾;

2 ,兩個指針 ptr_old_curr 、 ptr_new_curr 從左向右掃描,如果 *ptr_old_curr <= pivot ,就交換到 ptr_new_curr 位置;換言之, ptr_new_curr 一直指向下一個位置;

3 , ptr_old_curr 到達末尾后, ptr_new_curr 指向第一個大于 pivot 的位置,將 pivot 放回這個位置即可。

這樣的好處是:完全不需要判斷各種異常情況。 一個實現參見 http://www.cnblogs.com/qsort/archive/2011/08/30/2155923.html

?

查找第k小的數,可以利用qsort中的partition來一次去掉大概一半。

思想如下:Find(k, Left, Right)的時候,先選擇一個pivot,來Partition(Pivot, Left, Right)

之后,設Pivot所在位置為Middle,可知Pivot左側都比Pivot小,右側都比Pivot大。

如果左側有大于k個數,那么第k小的數肯定在左側,可以繼續Find(k, Left, Middle)

如果左側數字小于k個,那么第k小的數肯定在右側,而且是右側的第 (k - (Middle - Left + 1) )個數,可以繼續Find([k - (Middle - Left + 1)], Middle, Right)了。

qsort、partition、第k小的數


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。?!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 丰镇市| 金昌市| 习水县| 洛扎县| 凉山| 启东市| 略阳县| 天气| 年辖:市辖区| 大余县| 柘荣县| 灵石县| 三原县| 潼南县| 健康| 上饶市| 荥经县| 广昌县| 海淀区| 东安县| 报价| 东兴市| 滁州市| 桂东县| 织金县| 贺兰县| 漾濞| 东兴市| 宁国市| 东阿县| 临武县| 莱州市| 南汇区| 金山区| 甘孜县| 水城县| 综艺| 武川县| 彝良县| 深州市| 大英县|