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

qsort、partition、第k小的數

系統 1918 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條評論
主站蜘蛛池模板: 尚义县| 建宁县| 武强县| 介休市| 封丘县| 页游| 灵丘县| 焉耆| 澄迈县| 南木林县| 屯门区| 南投市| 镇坪县| 确山县| 和龙市| 策勒县| 新田县| 滦南县| 沙河市| 东山县| 岑溪市| 澎湖县| 南汇区| 安陆市| 达拉特旗| 龙山县| 多伦县| 大悟县| 恩平市| 衡阳县| 甘孜县| 水城县| 龙里县| 砚山县| 称多县| 开远市| 漳平市| 丰宁| 泰安市| 浑源县| 丰城市|