2014-11-03 64 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變量。實際上,編譯器完全優化了它,並以某種方式找到刪除它的方式可能會使其運行速度變慢。