【问题标题】:Quick sort of chars in String字符串中的快速排序字符
【发布时间】:2014-10-01 23:07:47
【问题描述】:

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

【问题讨论】:

  • 错误/问题是什么?如果没有编译,请提供堆栈跟踪。如果输出没有排序,请提供测试用例(以及不正确的输出)。
  • 我能够编译它,但是当我通过 cmd 运行它时,数百个在 sorty.quicksort<26>

标签: java string sorting char quicksort


【解决方案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);
}

}

【讨论】:

  • 嘿伙计,我真的很感谢你的帮助。我在这里以与您类似的方式做到了:pastebin.com/mXjeLCap 但我们的教授告诉我们使用公共静态 String quicksort(String y) 方法,我只是想不出任何解决方案。
  • 嗨 Derik,我修改了代码。据我了解,您的教授可能已经对您向用户公开的方法提出了要求。在上面的代码中,可以从您的主要方法/测试用例中调用 quickSort(myString)。它传递一个字符串并获得一个字符串类型的返回值。在内部它转换为一个char数组,它应该不是你教授的问题。
  • 如果您仍然不满意,您可以将第二个快速排序方法的签名更改为 quicksort(myString, int low, int high) 并使用 myString.charAt[i,j 或其他] 比较元素。但我相信上述解决方案会让他开心
猜你喜欢
  • 2015-11-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-09
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多