c - 基数排序时如何使字符串粘在一起?

标签 c arrays string sorting radix-sort

我必须编写一个程序,使用基数排序对字符串(精确长度为 7 个字符)进行排序。我已经制作了一个单独对每一列进行排序的函数。我的问题是如何让整个字符串移动,而不仅仅是一个字符。看到它在 C 中应该如何工作对我来说真的是个问题。

我制作了一个数组“char strings[3][8]”和“char output[3][8]”来对 3 个字符串进行排序,每个字符串中正好有 7 个字符。例如对这些字符串进行排序:

strcpy(strings[0], "kupbars");
strcpy(strings[1], "daparba");
strcpy(strings[2], "jykaxaw");

在输出中我得到:

dakaaaa
juparbs
kypbxrw

每一列都正确排序,但字符没有粘在一起。我在 3 小时内尝试了很多方法,但没有任何效果。

我的代码是这样的:

void countingSort(char a[][8], char b[][8]) {
  int c[123];
  for (int pos = 6; pos >= 0; pos--) {
    for (int i = 0; i < 123; i++)
      c[i] = 0;
    for (int i = 0; i < 3; i++)
      c[(int)a[i][pos]]++;
    for (int i = 1; i < 123; i++)
      c[i] += c[i - 1];
    for (int i = 2; i >= 0; i--) {
      b[--c[(int)a[i][pos]]][pos] = a[i][pos];
    }
  }
}

(有常量限制字符串长度等,因为很容易将其更改为变量 - 我只是专注于让这个程序正常工作。)

最佳答案

尝试改变循环来移动整个字符串:

    for (int i = 2; i >= 0; i--) {
        int k = --c[(int)a[i][pos]];
        for(int j = 0; j < 8; j++) {
            b[k][j] = a[i][j];
        }
    }

关于c - 基数排序时如何使字符串粘在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41007805/

相关文章:

javascript - 获取数组 Angular 的单个属性

C:为什么从命令行获取字符串比在程序中设置字符串更容易被识别?

C : Access violation reading location 0x00000044

java - Objective-C 中的 UIImageView 数组

javascript - 返回 JS 对象而不是数组的 php 脚本

python - 如何在不使用 Python 库函数的情况下将字符串转换为整数?

python - 根据 pandas 数据帧中的值更新字符串中的值

c - 使用 MPI 在所有任务上有效地更新相同的数组

用于计算一堆定义的最大数量的 C 宏

c - 关于 "->"和 "."的真实情况