亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

qsort、partition、第k小的數

系統 1641 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條評論
主站蜘蛛池模板: 国产成人夜间影院在线观看 | 99热久久这里只有精品首页 | 国产大片91精品免费观看不卡 | 久久精品3 | 一级特黄aaa免费 | 久久综合亚洲 | 不卡视频免费在线观看 | 久热免费 | 国产精品成人免费 | 久久亚洲国产最新网站 | 天天做天天爱天天怼 | 免费看一级特黄a大片 | 青青久久精品国产免费看 | 欧美久草视频 | 2019中文字幕视频 | 奇米影视狠狠干 | 一级毛片免费观看久 | 久久久成人啪啪免费网站 | 奇米在线免费视频 | 婷婷开心中文字幕 | 四虎影视国产在线观看精品 | 欧美影院 | 成人免费高清 | 免费国产一级特黄aa大片在线 | 久久免费区一区二区三波多野 | 天天舔 | 国产精品一久久香蕉产线看 | 亚洲欧美成人中文在线网站 | 久久精品亚洲一区二区三区浴池 | 欧美日韩久久毛片 | 亚洲人精品 | 国产精品视频99 | 日韩欧美在线观看视频 | 99久热国产精品视频尤物不卡 | 91久久精一区二区三区大全 | 日日免费视频 | 日韩最新视频一区二区三 | 国产精品久久久久久久久免费 | 香蕉视频网站免费观视频 | 欧美成人午夜 | 羞羞视频免费观看网站 |