使用许多相等的值对数组进行排序java

时间:2018-05-12 16:04:04

标签: java algorithm sorting

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

1 个答案:

答案 0 :(得分: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树,将count作为附加字段。

     

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