在java中快速排序 - 如何不使用temp进行交换?

时间:2014-11-03 00:21:59

标签: java quicksort

我需要使用" 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));
    }

}

1 个答案:

答案 0 :(得分:0)

没有理由删除temp变量。事实上,编译器完全优化它,并以某种方式找到删除它的方法可能会使它运行得更慢。