2014-10-01 2 views
0

영문자 순으로 문자열에서 문자를 정렬하려고합니다. 예 : 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); 
} 
+0

오류/문제는 무엇인가? 컴파일되지 않으면 스택 추적을 제공하십시오. 출력이 정렬되지 않으면 테스트 케이스 (및 잘못된 출력)를 제공하십시오. –

+0

컴파일 할 수 있지만 cmd를 통해 실행할 때 sorty.quicksort 에서 수백 개가 실행됩니다 줄 문자는 b = a [m]입니다. –

+0

이 코드는 매우 손상되었습니다. Quicksort에는 두 가지 재귀 지점이 필요합니다. 또한 입력 문자열의 데이터를 길이 'a'배열로 복사하지 않습니다. 이것은 멀리 일하고 있습니다. – rolfl

답변

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

안녕하세요, 저는 정말로 당신의 도움을 간략히 설명합니다. 나는 당신에게 similair 방법으로 그것을했다 : http://pastebin.com/mXjeLCap 하지만 우리의 교수는 우리에게 public static String quicksort (String y) 메서드를 사용하라고 말했고 나는 그것을 할 수있는 어떤 해결책도 생각할 수 없다. . –

+0

안녕하세요 Derik, 코드를 수정했습니다. 내가 아는 한, 교수님은 사용자에게 노출 된 방법에 대한 요구 사항을 제공했을 것입니다. 위의 코드에서 quickSort (myString)는 기본 메소드/테스트 케이스에서 호출 할 수 있습니다. 문자열을 전달하고 반환 값 f 문자열 형식을 가져옵니다. 내부적으로 char 배열로 변환되므로 교수에게 문제가되어서는 안됩니다. – user892871

+0

여전히 불만이라면 두 번째 quicksort 메서드의 서명을 quicksort (myString, int low, int high)로 변경하고 myString.charAt [i, j 또는 무엇이든간에]을 사용하여 요소를 비교할 수 있습니다. 그러나 나는 위의 해결책이 그를 행복하게 할 것이라고 확신한다. – user892871