我編寫了一個快速排序算法,我從this網站獲得。快速排序算法不在Java中排序
我跟着第一個算法,這是我的代碼是什麼樣子:
private static ArrayList<Integer> copy;
public static ArrayList<Integer> concatenate(ArrayList<Integer> a, ArrayList<Integer> b, ArrayList<Integer> c) {
ArrayList<Integer> result = new ArrayList<Integer>();
for(int i = 0; i < a.size(); i++)
result.add(a.get(i));
for(int i = 0; i < b.size(); i++)
result.add(b.get(i));
for(int i = 0; i < c.size(); i++)
result.add(c.get(i));
return result;
}
public static void quickSort(ArrayList<Integer> a) {
ArrayList<Integer> less = new ArrayList<Integer>();
ArrayList<Integer> greater = new ArrayList<Integer>();
ArrayList<Integer> equal = new ArrayList<Integer>();
Random rand = new Random();
if(a.size() > 1) {
int pivot = a.get(rand.nextInt(a.size()-1));
for(int i = 0; i < a.size(); i++) {
if(a.get(i) < pivot)
less.add(a.get(i));
if(a.get(i) == pivot)
equal.add(a.get(i));
if(a.get(i) > pivot)
greater.add(a.get(i));
}
quickSort(less);
quickSort(greater);
a = concatenate(less, equal, greater);
}
copy = a;
}
出於某種原因,當我打印在主拷貝我得到了看起來像這樣:
Before: 2, 5, 9, 3, 3, 2, 0, 8, 1, 5
After : 0, 1, 2, 5, 9, 3, 3, 2, 8, 5
有我的代碼或算法的問題?
您是否調試過識別有問題的行的功能? – Cristik
請注意,您可以通過簡單地使用list.addAll(anotherList)來跳過'concatenate()'中的那些for-loops。 – aleju
是的。似乎沒有問題的行 – computerguy