【问题标题】:Sorting array with many equal values java [duplicate]对具有许多相等值的数组进行排序java [重复]
【发布时间】:2018-05-12 16:04:04
【问题描述】:

如果我有一个数组,其中近 90% 的值是相等的,我想对它进行排序。我应该使用什么最好的排序方法?

【问题讨论】:

  • Counting sort 应该有效。
  • 当你说“价值观”时,它们是什么类型的?
  • 嗯,这是一个大类,里面有一些整数可以比较
  • 有一个带有 key:list 的映射来存储所有重复的值并将唯一值存储在一个集合中,然后对集合进行排序..
  • 谢谢大家,太有帮助了

标签: java algorithm sorting


【解决方案1】:

如果数组中有很多重复项,则可以使用不同的方法对其进行排序。对于这个 IMO,像 AVL 或红黑树这样的自平衡二叉树将是比任何其他排序算法更好的方法。

这个想法是扩展树节点以具有键数。

class Node {
   int key;
   Node left, right;
   int count;  // Added to handle duplicates
   // Other tree node info for balancing like height in AVL
}

下面是使用AVL树的完整算法。

1) 创建一个空的 AVL 树,并将计数作为附加字段。

2) 遍历输入数组并对每一个元素‘arr[i]’进行跟踪

   a) If arr[i] is not present in tree, then insert it and initialize count as 1

   b) Else increment its count in tree.

3) 对树进行中序遍历。在按顺序放置每个键时 在 arr[] 中计算次数。

第二步需要O(n Log m)时间,第三步需要O(n)时间。所以总体时间复杂度为O(n Log m),其中m 是不同元素的数量。

这里给出详细的解释和实现:Geeks for Geeks

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2017-04-12
    • 2021-08-22
    • 2022-06-10
    • 1970-01-01
    • 2012-09-26
    • 2021-06-25
    相关资源
    最近更新 更多