我需要一点帮助来理解基交换排序算法的实现。
基交换(我不知道它在基于英语的文献中是否确切的名称)与quicksort非常相似,但是使用了数字的二进制表示。
第一,我们在二进制表示中查找最高的数字,然后使用两个索引(从数组开始和结束时,如果给定数字为0,则增加第一个数字,如果给定数字为1时,则递增另一个索引)。然后我们交换两个数字,然后继续工作直到i=j(索引相等)。然后我们有两个独立的分区,并使用第二个最重要的数字对它们进行排序,等等.
我主要有几个问题:
发布于 2013-06-01 23:17:10
听起来时间复杂度是O(n*k),空间复杂度是O(k),k是每个元素的位数。
在C++中
radixQsort(int* arrb, int* arre, int rad=INT_BITS){
if(arrb==arre)return;
int* arrm = std::partition(arrb,arre,[rad](a){return !(a&(1<<rad));});
radixQsort(arrb,arrm,rad-1);
radixQsort(arrm,arre,rad-1);
}这是使用标准库中的隔断实现的,该库的工作方式类似于您描述的分区。
发布于 2013-06-06 17:20:18
https://softwareengineering.stackexchange.com/questions/200183
复制相似问题