c/c++语言开发共享排序大小为n的数组

如果大小为n的数组只有3个值0,1和2(重复任意次数),那么对它们进行排序的最佳方法是什么。 最好表示复杂性。 考虑空间和时间复杂性

    计算每个数字的出现次数,然后用正确的计数填充数组,这是O(n)

    声音很像Dijkstra的荷兰国旗问题。

    如果您需要不使用计数的解决方案,请查看https://www.csse.monash.edu.au/~lloyd/tildeAlgDS/Sort/Flag/

    未经测试的C风格解决方案:

     int count[3] = {0, 0, 0}; for (int i = 0; i < n; ++i) ++count[array[i]]; int pos = 0; for (int c = 0; c < 3; ++c) for (int i = array[c]; i; --i) array[pos++] = c; 

    Haskell双线:

     count xs = Map.toList $ Map.fromListWith (+) [ (x, 1) | x <- xs ] countingSort xs = concatMap ( (x, n) -> replicate nx) (count xs) > countingSort [2,0,2,1,2,2,1,0,2,1] [0,0,1,1,1,2,2,2,2,2] 

      以上就是c/c++开发分享排序大小为n的数组相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/545701.html

      (0)
      上一篇 2021年1月10日
      下一篇 2021年1月10日

      精彩推荐