2014-10-01 78 views
0

我想按字母順序排序字符串。 例如:程序= agmoprr 這是我的代碼,我看不到我該如何修復它。任何提示或提示? :)快速排序的字符串中的字符

public static String quicksort(String y){ 
    String x = ""; 
    char[] a = new char[y.length()]; 
    int i = 0; 
    int j = a.length; 
    if(j-i < 0) return y; 
    int m = i+(j-i)/2; 
    char b = a[m]; 
    a[m] = a[i]; 
    a[i] = b; 
    int r = i+1; 
    for(int s = r; s!=j; s=s+1){ 
     if(a[s] < b) 
     { 
      char tmp = a[s]; 
      a[s] = a[r]; 
      a[r] = tmp; 
      r=r+1; 
     } 
    } 
    r=r-1; 
    a[i] = a[r]; 
    a[r] = b; 
    return x = quicksort(y); 
} 
+0

什麼錯誤/問題?如果沒有編譯,請提供堆棧跟蹤。如果輸出沒有排序,請提供測試用例(和不正確的輸出)。 – 2014-10-01 23:09:27

+0

我能夠編譯它,但是當我通過cmd運行它時,幾百個在sorty.quicksort 這是行char b = a [m]; – 2014-10-01 23:13:21

+0

此代碼非常非常破碎。快速排序需要兩個遞歸點。此外,您不是將數據從輸入字符串複製到'a'數組,只是長度。這遠非如此。 – rolfl 2014-10-01 23:13:42

回答

1

首先你應該做遞歸,沒有它,你不會去解決快速排序。 以下版本適用於我。

public class Quicksort { 

char[] myArray; 

public String sort(String myStr){ 

    if(myStr == null || myStr.length() == 0 || myStr.length() == 1){ 
     return null; 
    } 
    int length = myStr.length(); 
    int low =0,high = length -1; 
    this.myArray = myStr.toCharArray(); 

    quickSort(low,high); 
    return new String(myArray); 

} 

public static void quickSort(int low, int high){ 

    int i = low; 
    int j = high; 
    char tmp; 

    int pivot = (low+high)/2; 

    while (i <= j) { 
     while(myArray[i] < myArray[pivot]){ 
      i++; 
     } 
     while(myArray[j] > myArray[pivot]){ 
      j--; 
     } 

     if(i <= j) { 
      tmp = myArray[i]; 
      myArray[i] = myArray[j]; 
      myArray[j] = tmp; 
      i++; 
      j--; 
     } 
    } 

    if(low < j){ 
     quickSort(low, j); 
    } 
    if(i < high){ 
     quickSort(i,high); 
    } 
    System.out.println(myArray); 
} 

}

+0

嘿,我真的很欣賞你的幫助。我以相似的方式在這裏爲你做到了這一點:http://pastebin.com/mXjeLCap 但我們的教授告訴我們要使用公共靜態String quicksort(String y)方法,我想不出任何解決方案來做到這一點。 – 2014-10-01 23:46:35

+0

嗨Derik,我修改了代碼。據我所知,你的教授可能已經向你提供了暴露給用戶的方法的要求。在上面的代碼中,可以從主要方法/測試用例中調用quickSort(myString)。它傳遞一個字符串並得到一個返回值f string類型。它在內部將它轉換成一個char數組,並且它對教授來說應該不成問題。 – user892871 2014-10-02 00:17:06

+0

如果您仍然不滿意,可以將第二個quicksort方法的簽名更改爲quicksort(myString,int low,int high),並使用myString.charAt [i,j或其他方法]比較元素。但我相信上面的解決方案會讓他開心 – user892871 2014-10-02 00:17:41