簡體   English   中英

C ++ Quicksort字母數組

[英]C++ Quicksort Alphabet Array

我正在嘗試使用quicksort對字母數組進行排序。

我基本上嘗試從主算法轉換並將其轉換為使用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]和[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

“低”和“高”參數是數組的索引。 您可以嘗試這樣調用:

quick_sort(unsorted_alphabet,0,25);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM