我已经获取了一个给定的int数组并将其分解为多个子数组并将其放入ArrayList中。
1)我需要为每个a的索引生成一个线程。 (这不起作用并导致线程使用相同的数据)
2)我需要通过quicksort类发送每个线程进行排序。(因为它有效)
3)我还需要将所有线程排序的数组合并为一个排序的数组。(不知道如何做到这一点)
public void run(ArrayList<int[]> a) {
Quicksort x = new Quicksort();
for (int i = 0; i < a.size(); i++) {
store = a.get(i);
System.out.println(store);
new Thread() {
public void run() {
x.sort(store);
System.out.println(Arrays.toString(store));
}
}.start();
}
}
public class Quicksort {
private int array[];
private int length;
public void sort(int[] inputArr) {
if (inputArr == null || inputArr.length == 0) {
return;
}
this.array = inputArr;
length = inputArr.length;
quickSort(0, length - 1);
}
private void quickSort(int lowerIndex, int higherIndex) {
int i = lowerIndex;
int j = higherIndex;
int pivot = array[lowerIndex+(higherIndex-lowerIndex)/2];
while (i <= j) {
while (array[i] < pivot) {
i++;
}
while (array[j] > pivot) {
j--;
}
if (i <= j) {
exchangeNumbers(i, j);
i++;
j--;
}
}
if (lowerIndex < j)
quickSort(lowerIndex, j);
if (i < higherIndex)
quickSort(i, higherIndex);
}
private void exchangeNumbers(int i, int j) {
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
我如何填充
public class ArrayLists {
private ArrayList<int[]> List = new ArrayList<>();
public ArrayLists(int[] a, int size) {
int[] temp = new int[size];
int count = 0;
while (count + size <= a.length) {
temp = Arrays.copyOfRange(a, count, count + size);
List.add(temp);
count = count + size;
}
int[] temp2 = new int[a.length - count];
if (count != a.length && count < a.length) {
temp2 = Arrays.copyOfRange(a, count, a.length);
List.add(temp2);
}
run(List);
}
答案 0 :(得分:0)
问题是我如何使用store变量。我需要一个final int []而不是一个静态int []全局变量。