2013-03-22 4 views
0

quicksort를 사용하여 알파벳 배열을 정렬하려고합니다.C++ Quicksort Alphabet Array

기본적으로 기본 알고리즘에서 시도하고 char 배열로 작업하도록 변환했습니다.

나는 거의 다 왔다고 생각하지만, 나는 그것을 얻지 못하고있다.

도움을 주시면 감사하겠습니다.

:)

#include <stdio.h> 
#include <conio.h> 
#include <stdlib.h> 

int qscounter = 0; 

int split(char a[], char low, char high) 
{ 
    char part_element = a[low]; 

    for (;;) { 
     while (low < high && part_element <= a[high]) 
      high--; 
     if (low >= high) break; 
     a[low++] = a[high];  
     while (low < high && a[low] <= part_element) 
      low++; 
     if (low >= high) break; 
     a[high--] = a[low]; 
    } 
    a[high] = part_element; 
    return high; 
} 

void quick_sort(char a[], char low, char high) 
{ 
    char middle; 

    if (low >= high) return; 
    middle = split(a, low, high); 
    qscounter++; 
    quick_sort(a, low, middle - 1); 
    quick_sort(a, middle + 1, high); 

    printf("Quick Sort: %d\n", qscounter); 
    for(int i=0;i<26;i++) 
     printf("%c",a[i]); 
    printf("\n\n"); 
} 

void main() 
{ 
    char unsorted_alphabet[26] = {'A','E','O','D','B','Q','G','V','Y','J','Z','S','M','N','C','P','F','R','L','T','U','H','W','X','I','K'}; 
    quick_sort(unsorted_alphabet,unsorted_alphabet[0],unsorted_alphabet[25]); 
    fflush(stdin); 
    getchar(); 
} 
+0

귀하의 문제는 무엇입니까? – jarrodparkes

+0

[낮음] 또는 [높음]의 값이 정확히 무엇인지 아십니까? –

답변

2

귀하의 코드는 다음과 같은 문제가 있습니다 당신은 확실히 잘못 배열 인덱스와 같은 요소 값을 사용하려고했습니다. quick_sort 함수에 [0]과 [25]를 인덱스로 전달하지만 low와 high는 char이 아닌 정수형이어야합니다. 배열 값은 처음에는 순서가 맞지 않지만 배열 인덱스는 그렇지 않으므로 인덱스로 char 값을 사용할 수 없습니다.

올바른 코드는 다음과 같아야합니다) (주에서

int split(char a[], int low, int high) //should be integer type for low and high 
{ 
    char part_element = a[low]; 
    //if low is a char, what is a[char]? It will not be the value you intended to want 

    //do same thing in your code 
} 

void quick_sort(char a[], int low, int high) 
{ 
    int middle; //not char 

    //do same thing as in your code 

}

을, 함수 호출해야합니다 : 그것은 실제로 이러한 사소한 변경 후 잘 작동

quick_sort(unsorted_alphabet,0,25); //should pass array indices 

: 내가 가지고있어 :

Quick Sort: 20 
ABCDEFGHIJKLMNOPQRSTUVWXYZ 
+0

오류 : 오류 C3872 : '0xa0':이 문자는 식별자에 사용할 수 없습니다. 오류 C2065 : '': 신고되지 않은 식별자 오류 C2143 : 구문 오류 : 누락되었습니다 ';' before 'while' – Lee

+0

@Lee 변경된 소스 코드는 여기에서 확인하십시오 : https : //docs.google.com/document/d/13jFGf46pZJDTnf61jlXHQBHMVywjIofRAmQPlf-Yp-I/edit? usp = sharing보기 또는 볼 수없는 경우 알려주십시오. 그것을 컴파일하십시오. 나에게는 아무런 문제가 없다. – taocp

+0

작품 - 고맙습니다. – Lee

0

"낮은"및 배열 "높이"매개 변수는 인덱스. 이 같은 전화를 시도 할 수 있습니다 :

quick_sort(unsorted_alphabet,0,25);