我正在编写自己的可视化器来对算法进行排序,并且通过让算法解析包含两个值的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排序。