我需要使用" maximum(int [] arr,int x,int y)" class(在x到y之间的整数数组中找到最大值)以摆脱quicksort中的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));
}
}
答案 0 :(得分:0)
没有理由删除temp
变量。事实上,编译器完全优化它,并以某种方式找到删除它的方法可能会使它运行得更慢。