algorithm - 如何将以下不稳定的排序算法转换为稳定的?

标签 algorithm sorting stable-sort

考虑 n 张标记为红色或蓝色的卡片

            i=1;
            j=n;                 
            while(i<n)
            {
              if(a[i]==RED)
                i++;
              if(a[j]==BLUE)
                j--;
              swap(a[i],a[j]);
            } 

如何使这个就地算法稳定 我可以获得一个 O(n^2) 的问题解决方案 谁能提出一个 O(n) 的解决方案?

最佳答案

如果允许我们使用额外的内存,只需进行 2 遍扫描:

第一关:

count = 0
foreach a[i] == RED
    b[count ++] = a[i]
    i ++

第二遍:

foreach a[i] == BLUE
    b[count ++] = a[i]
    i ++

最后复制a = b

总的来说,时间复杂度为 O(3n) = O(n)

关于algorithm - 如何将以下不稳定的排序算法转换为稳定的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25609470/

相关文章:

javascript - 随机路径生成算法

arrays - 查看一组值是否出现在数组中的有效方法?

algorithm - 无线节点发现

c++ - 为什么 stable_sort 会影响我的哈希表值?

c++ - 内置qsort函数和稳定排序函数有什么区别?

matlab - MATLAB 中的稳定 accumarray

c# - 用于更改项目条例的自定义排序算法

java - 按日期对 ArrayList<String> 进行排序,不包括字符串的前半部分

C动态数组内存分配、填充和排序

linux - bash 排序 - 如何使用时间戳排序