我正在尝试使用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 :(得分:2)
您的代码存在以下问题: 您试图将元素值用作数组索引,这当然是错误的。您将[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
答案 1 :(得分:0)
“低”和“高”参数是数组的索引。您可以尝试这样打电话:
quick_sort(unsorted_alphabet,0,25);