-2
我需要使用「maximum(int [] arr,int x,int y)」類(它在從x到y之間的整數數組中找到最大值)以在quicksort中消除temp。在java中快速排序 - 如何不使用temp進行交換?
簡而言之,在交換期間,不應使用臨時元素。
我的整個類是:
import java.util.Arrays;
public class qs {
//divide and conquer for max value in an array from x to y
static int maximum(int[] arr, int x, int y) {
if (y - x <= 1) {
return (Math.max(arr[x], arr[y]));
} else {
int max1 = maximum(arr, x, (x + y)/2);
int max2 = maximum(arr, (x + y)/2 + 1, y);
return Math.max(max1, max2);
}
}
static void quickSort(int[] arr, int l, int r){
int i = l; int j = r; int temp;
int a = arr[(l+r)/2];
while(i<=j){
while(arr[i] < a){
i++;
}
while(arr[j]>a){
j--;
}
if(i <= j){
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if(l<j){
quickSort(arr, l, j);
}
if(i<r){
quickSort(arr, i, r);
}
}
public static void main(String[] args) {
int[] arr = { 2, 17, -4, 42, 9, 26, 11, 3, 5, 28 };
quickSort(arr, 0, 9);
System.out.println("Quicksorted Array: " + Arrays.toString(arr));
}
}
爲什麼你想擺脫'臨時'? – 2014-11-03 00:22:37
上帝禁止你的代碼保持一些可讀性。我相信有一些fancypantsy的方式來實現XOR操作員,但是請大家幫忙,並且不要在該領域尋求任何優化,除非它被非常清楚地視爲問題。 – 2014-11-03 00:25:40
[可以在Java中編寫交換方法嗎?]可能的重複(http://stackoverflow.com/questions/1363186/is-it-possible-to-write-swap-method-in-java) – Kyborek 2014-11-03 00:26:25