2016-04-26 133 views
2

任何人都可以幫助我找出這種交換方法,它是較大的快速排序程序的一部分嗎?它應該採用一個數組和兩個整數並交換整數指示的索引位置。在java中快速排序的交換方法

private static <T extends Comparable<T>> int partition(T[] table, int first, int last) { 
    T pivot = table[first]; 
    int up = first; 
    int down = last; 

    do { 
     while ((up < last) && (pivot.compareTo(table[up]) >= 0)) { 
      up++; 
     } 
     while (pivot.compareTo(table[down]) < 0) { 
      down--; 
     } 
     if (up < down) { 
      swap(table, up, down); 
     } 
    } 

    while (up < down); 
    swap(table, first, down); 
    return down; 
} 

交換方法目前未定義,我不知道如何讓它工作。我曾嘗試編寫該方法:

void swap(T[] array, int a, int b) { 
    T temp = array[a]; 
    array[a] = array[b]; 
    array[b] = temp; 
} 

但是我一直收到T無法解析爲類型的錯誤。但是,當我嘗試將類型更改爲int時,該方法在上面調用的位置不起作用。

回答

3

您需要將通用類型<T>添加到您的swap方法中。類似於

static <T> void swap(T[] array, int a, int b) { 
    T temp = array[a]; 
    array[a] = array[b]; 
    array[b] = temp; 
} 
+0

我也試過,並且我的swap方法調用仍然說「方法swap(T [],int,int)未定義爲類型QuickSort」我將方法定義在與private static相同的級別上> int partition(T [] table,int first,int last) – Teej

+0

不知道它的工作原理,事實證明,我剛剛沒有編譯過一會兒哈哈。非常感謝 – Teej

-1

如果您正在執行除作業分配之外的任何快速排序,請不要浪費時間。使用Collections.sort()。

+0

這是一項家庭作業 – Teej