我必须通过使用基数排序来制作一个程序来对字符串进行排序(确切长度为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];
}
}
}
(有常数限制字符串的长度等,因为它很容易将其更改为变量 - 我只是专注于正确得到这个工作方案)
我相信这是通常用链表每个数字的桶,这将有一个指针到整个字符串执行。 (您需要更复杂的数据结构;难以在原地完成) – qxz