[英]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.