如何获得合并排序算法以返回要交换的目标索引的ArrayList?

时间:2019-04-10 21:39:28

标签: java arrays sorting arraylist

我正在编写自己的可视化器来对算法进行排序,并且通过让算法解析包含两个值的int数组的ArrayList来解决我遇到的计时器问题,该数组包含两个要交换的索引。这适用于选择,冒泡和插入排序,但是我需要对合并和快速排序进行此操作,而且我不知道该怎么做。

我没有做太多尝试,因为我尝试做的所有事情都给代码的工作方式带来了另一个问题。我知道我将需要使用递归,这可能与我要解析到显示器的内容有关。

void merge(Spectrum colors, int l, int m, int r) {
    int[] arr = new int[colors.size()];
    for(int i = 0; i < arr.length; i++) {
        arr[i] = colors.get(i).getNum();
    }
    int n1 = m - l + 1;
    int n2 = r - m;
    int[] L = new int[n1];
    int[] R = new int[n2];
    for(int i = 0; i < n1; i++) {
        L[i] = arr[l + i];
    }
    for(int j = 0; j < n2; j++) {
        R[j] = arr[m + 1 + j];
    }
    int i = 0;
    int j = 0;
    int k = l;
    while(i < n1 && j < n2) {
        if(L[i] <= R[j]) {
            arr[k] = L[i];
            i++;
        }else {
            arr[k] = R[j];
            j++;
        }
        k++;
    }
    while(i < n1) {
        arr[k] = L[i];
        i++;
        k++;
    }
    while(j < n2) {
        arr[k] = R[j];
        j++;
        k++;
    }
}

这就是我将合并子数组的方法所拥有的。我一直在做的是,每次我在任何Spectrum中切换两个值(扩展了ColorIDs的ArrayList,扩展了Colors并具有单独的ID的另一个类)时,我都会创建一个新数组,其中包含我交换的两个索引,并将其添加到swapIndexes中,然后我将使用它开始进行排序。

我无法获得可以可靠地返回可与递归一起使用的ArrayList的东西,因此未收到任何结果。最终结果应该是一个ArrayList,该数组包含大小为2的数组,每次交换按顺序应属于Merge排序。

0 个答案:

没有答案