c - 获取一系列已排序的小写字母

标签 c arrays string quicksort

该算法可以很好地处理整数,但自从我将它们转换为字符后,它一直在输出中打印 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;
}

最佳答案

三个问题:

  1. a 被声明为 int 数组,但所有函数都处理 char 数组。这意味着它们将无法正确迭代数组。将其更改为char a[N]
  2. 要读取字符,请使用 %c 格式说明符 scanf
  3. 要打印字符,请使用 %c 格式说明符 printf

关于c - 获取一系列已排序的小写字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38730104/

相关文章:

c - 仅使用按位运算符实现逻辑非(除了!)

c - 为什么使用 SDL I/O 函数而不是 stdio 函数?

arrays - 正向替换打包数组

python - 将具有重复字符的字符串拆分为列表

javascript - 在 Javascript 中,如何转换字符串以便它可以用于调用属性?

c - 生产者消费者唯一互斥锁

c - OpenGL glTexImage2D 内存问题

jquery - 从ajax调用创建数组

Javascript 创建类别超链接数组

python - 如何查找重复字母并将其从列表中的字符串中全部删除