怎么让堆排序稳定
如何让堆排序稳定
算法导论第三版的8.3-2里提到可以让堆排序稳定,只要加一个索引。
但是我实在是不能理解,希望大神可以指点一下,谢啦
------解决思路----------------------
排序的两个重要动作就是比较和移动
所谓稳定的排序指的是
对于键值比较的结果为相等(==)的元素A和B,如果排序前A在B前,排序后A保持在B前面。
增加索引的意思就是增加键值(比如排序前的位置),当其他键值相同的时候,进行位置的比较。
------解决思路----------------------
可以自己建立一个保存开始时候元素的相对位置信息,如果排序后发现两个相等的元素的相对位置发生了变化,就换回来,这样就稳定了
------解决思路----------------------
以大顶为例, heapify从三个中选出一个最大值, 如果有两个值相等, 你选择那一个, 就是用到这索引的时候
算法导论第三版的8.3-2里提到可以让堆排序稳定,只要加一个索引。
但是我实在是不能理解,希望大神可以指点一下,谢啦
------解决思路----------------------
排序的两个重要动作就是比较和移动
所谓稳定的排序指的是
对于键值比较的结果为相等(==)的元素A和B,如果排序前A在B前,排序后A保持在B前面。
增加索引的意思就是增加键值(比如排序前的位置),当其他键值相同的时候,进行位置的比较。
------解决思路----------------------
可以自己建立一个保存开始时候元素的相对位置信息,如果排序后发现两个相等的元素的相对位置发生了变化,就换回来,这样就稳定了
------解决思路----------------------
以大顶为例, heapify从三个中选出一个最大值, 如果有两个值相等, 你选择那一个, 就是用到这索引的时候