作者poyenc (发箍)
看板C_and_CPP
标题Re: [问题] quicksort swap pivot时出现问题
时间Fri Apr 12 03:35:31 2019
要把 pivot 放中间也是可以唷, 不过这要引入视图(view) 的概念.
简单说就是提供一个抽象化层, 让我们
看到的阵列不是实际上的阵
列, 而这个抽象化的目的是让我们看不到 pivot, 如此就可以解决
partition 时会把 pivot 搬来搬去的问题
┌──┬──┬──┬──┐
视图
│ 3 │ 4 │ 2 │ 5 │
└──┴──┴──┴──┘
┌──┬──┬──┬──┬──┐
阵列
│ 3 │ 4 │ 1 │ 2 │ 5 │
└──┴──┴──┴──┴──┘
(pivot)
在提供这层抽象化前,
首先得面对的问题就是索引转换. 由上图可
以看到元素 5 在视图里的索引是 3, 但在阵列里的索引却是 4,
不过这个转换并不会太复杂
另外
在 partition 的最後, 要稍微注意 pivot 摆放的位置, 其他
就没什麽特别的地方. 实作可以参考下面的范例
无抽象化:
https://bit.ly/2X13mEN
有抽象化:
https://bit.ly/2IaFVWt
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 180.176.51.8
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1555011335.A.919.html
※ 编辑: poyenc (180.176.51.8), 04/12/2019 03:38:55
1F:推 nasty1122: 感谢~~ 04/17 21:24