在String中快速排序字符

时间:2014-10-01 23:07:47

标签: java string sorting char quicksort

我正在尝试按字母顺序对字符串中的字符进行排序。 例如:program = 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);
}

1 个答案:

答案 0 :(得分:1)

首先你应该做递归,没有它你不会解决quicksort。 以下版本适合我。

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);
}

}