【问题标题】:Optimize Merge Sort with ArrayList使用 ArrayList 优化合并排序
【发布时间】:2018-04-25 15:40:06
【问题描述】:

我写了这个版本的合并排序(这是我合并部分的部分),但它有一个问题。我想将它与泛型一起使用,因此我制作了一个 Object 数组以在此过程中为我提供帮助。当我编译时,它会给出一个警告,我用代码顶部的那一行来抑制它。有没有办法避免使用对象数组? (方法 compare 来自另一个类,但它的工作原理与 compareTo 相同):

@SuppressWarnings("unchecked")
  public static <T> void merge(ArrayList<T> array, Comparator<T> c, int p, int mid, int q) {
    Object[] tmp = new Object[q-p+1]; 
    int i = p;
    int j = mid+1;
    int k = 0;
    while (i <= mid && j <= q) {
        if (c.compare(array.get(i), array.get(j))<0)
          tmp[k] = array.get(i++);
        else
          tmp[k] = array.get(j++);
        k++;
    }
    if (i <= mid && j > q) {
        while (i <= mid) 
          tmp[k++] = array.get(i++);
    } else {
        while (j <= q)
          tmp[k++] = array.get(j++);
    }
    for (k = 0; k < tmp.length; k++)
      array.set(k+p, (T)tmp[k]);
  }

【问题讨论】:

标签: java algorithm sorting merge


【解决方案1】:
public static <T> void merge(ArrayList<T> array, Comparator<T> c, int p, int mid, int q) {
        ArrayList<T> tmp = new ArrayList<T>(q-p+1); 
        int i = p;
        int j = mid+1;
        int k = 0;
        while (i <= mid && j <= q) {
            if (c.compare(array.get(i), array.get(j))<0)

                tmp.add(array.get(i++));
            else
                tmp.add(array.get(j++));
            k++;
        }
        if (i <= mid && j > q) {
            while (i <= mid) 
                tmp.add(array.get(i++));
        } else {
            while (j <= q)
                tmp.add(array.get(j++));
        }
        for (k = 0; k < tmp.size(); k++)
          array.set(k, tmp.get(k));

        System.out.println(array);
      }

您可以通过这种方式跳过对象数组。希望对你有帮助:)

【讨论】:

    【解决方案2】:

    您的代码很好。 您也可以使用:

    T[] tmp = (T[]) new Object[q - p + 1];
    

    使用相同的抑制注释,并跳过 (T)tmp[k] 处的演员表。

    【讨论】:

      猜你喜欢
      • 2012-09-17
      • 2020-05-25
      • 2018-10-16
      • 2021-06-02
      • 2022-01-26
      • 1970-01-01
      • 2011-08-18
      • 2017-08-28
      相关资源
      最近更新 更多