【发布时间】:2020-10-16 01:25:51
【问题描述】:
所以,我正在尝试实现计数排序算法来对用户给出的数字数组进行排序,这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int i,n=15;
char arr[]={"ABEFGEAGCEDBFAC"}; //I'm using this string to test it out
/*for(int i=0; i<n; i++){
printf("Insert a letter %d: ",i+1);
scanf("%c",&arr[i]);
fflush(stdin);
}
*/
printf("Array: \n[ ");
for(i=0; i<n; i++){
if(i<n-1)
printf("%c | ",arr[i]);
if(i==n-1)
printf("%c ]\n",arr[i]);
}
printf("\n");
int range[7];
for(i=0;i<7;i++){
range[i]=0;
}
for(i=0; i<n; i++){ //I've seen other ways to do this, but I just need it to go from A-G
//not sure if this is the problem.
switch(arr[i]){
case 'A':
range[0]++;
break;
case 'B':
range[1]++;
break;
case 'C':
range[2]++;
break;
case 'D':
range[3]++;
break;
case 'E':
range[4]++;
break;
case 'F':
range[5]++;
break;
case 'G':
range[6]++;
break;
}
}
printf("Counting array (number of times it appear in the array): \n[ ");
for(i=0; i<7; i++){
if(i<6)
printf("%d | ",range[i]);
if(i==6)
printf("%d ]\n",range[i]);
}
printf("\n");
for(i=1;i<7;i++){ //Here I do the sum of all elements in the array
range[i] = range[i] + range[i-1];
}
printf("Sum of the array: \n[ ");
for(int i=0; i<7; i++){
if(i<6)
printf("%d | ",range[i]);
if(i==6)
printf("%d ]\n",range[i]);
}
printf("\n");
char ord[15];
for(i=n-1;i>=0;i--)
ord[--range[arr[i] - 'A']] = arr[i];
for (i=0;i<n;i++){
printf("%c ",ord[i]);
}
/*
printf("Ord: \n[ ");
for(int i=0; i<15; i++){
if(i<14)
printf("%c | ",ord[i]);
if(i==14)
printf("%c ]\n",ord[i]);
}
*/
}
所以,如您所见,如果我没记错的话,错误是当我尝试使用倒数第二个 for 句子中的范围数组将每个字母放在正确的位置时。我已经看到了其他实现它的方法,但是我无法完成它,一旦我尝试打印 ord[i],它就会崩溃。 我在尝试完全理解 for 中发生的事情时遇到了麻烦。
更新:
如上所示,尝试对代码实施 fish-404 的更正。无法正确实施。
上次更新:
上面的代码现在已经完成并且功能齐全。感谢@fish-404。
【问题讨论】:
标签: arrays c sorting counting-sort