该算法可以很好地处理整数,但自从我将它们转换为字符后,它一直在输出中打印 null:
/* sort a series of lower case letters using quicksort algorithm. */
#include <stdio.h>
#define N 10
// since c gets the ascii code when returning an int for a char variable.
char quicksort(char a[], char low, char high);
char split(char a[], char low, char high);
int a[N];
int main(void)
{
int i;
printf("Enter letters to be sorted: ");
for (i = 0; i < N; i++)
scanf("%d", &a[i]);
quicksort(a, 0, N - 1);
printf("In sorted order: ");
for (i = 0; i < N; i++)
printf("%s ", a[i]);
printf("\n");
return 0;
}
char quicksort(char a[], char low, char high)
{
int middle;
if (low >= high) return;
middle = split(a, low, high);
quicksort(a, low, middle - 1);
quicksort(a, middle + 1, high);
}
char 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;
}
最佳答案
三个问题:
a
被声明为int
数组,但所有函数都处理char
数组。这意味着它们将无法正确迭代数组。将其更改为char a[N]
。- 要读取字符,请使用
%c
格式说明符scanf
。 - 要打印字符,请使用
%c
格式说明符printf
。
关于c - 获取一系列已排序的小写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730104/