0

クイックソートを使用してアルファベット配列を並べ替えようとしています。

基本的に、メインアルゴリズムから、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();
}
4

2 に答える 2

2

コードには次の問題があります: 要素値を配列インデックスとして使用しようとしましたが、これは明らかに間違っていました。a[0] と a[25] をインデックスとして quick_sort 関数に渡しますが、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

}

main() では、関数呼び出しは次のようにする必要があります。

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

これらの小さな変更の後、実際には正常に動作します:

Quick Sort: 20
ABCDEFGHIJKLMNOPQRSTUVWXYZ
于 2013-03-22T01:36:15.727 に答える
0

「low」および「high」パラメーターは、配列のインデックスです。あなたはこのように呼び出すことを試みることができます:

quick_sort(unsorted_alphabet,0,25);
于 2013-03-22T01:30:20.297 に答える