2014-11-03 58 views
-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)); 
    } 

} 
+1

为什么你想摆脱'临时'? – 2014-11-03 00:22:37

+1

上帝禁止你的代码保持一些可读性。我相信有一些fancypantsy的方式来实现XOR操作员,但是请大家帮忙,并且不要在该领域寻求任何优化,除非它被非常清楚地视为问题。 – 2014-11-03 00:25:40

+0

[可以在Java中编写交换方法吗?]可能的重复(http://stackoverflow.com/questions/1363186/is-it-possible-to-write-swap-method-in-java) – Kyborek 2014-11-03 00:26:25

回答

0

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