[英]C Bubble Sort algorithm
我有以下代码使用冒泡排序逻辑对字符串进行排序。 我感到困惑的部分是for循环,我不确定为什么我设置为1以及为什么迭代J直到小于nj:
#include <stdio.h>
#include <string.h>
void main()
{
char name[25][50],temp[25];
int n, i, j;
printf("\n\nSorts the strings of an array using bubble sort :\n");
printf("-----------------------------------------------------\n");
printf("Input number of strings :");
scanf("%d",&n);
printf("Input string %d :\n",n);
for(i=0; i<=n; i++)
{
fgets(name[i], sizeof name, stdin);
}
/*Logic Bubble Sort*/
for(i=1; i<=n; i++)
{
for(j=0; j<=n-i; j++)
{
if (strcmp(name[j],name[j+1])>0)
{
strcpy(temp,name[j]);
strcpy(name[j],name[j+1]);
strcpy(name[j+1],temp);
}
}
}
printf("The strings appears after sorting :\n");
for(i=0;i<=n;i++)
printf("%s\n",name[i]);
}
此代码有一些细微的错误
您正在运行for循环多于必要。
for(i=0;i<=n;i++) { fgets(name[i], sizeof name, stdin); }
原因是在scanf("%d",&n);
上面的行scanf("%d",&n);
此处行的结尾保留在输入流中,并被添加到name[0]
。 您应该将其更改为scanf("%d ",&n);
这将消耗同一语句中的行尾。 同样,for循环现在也应该从for(i=0;i< n;i++)
。
另外, fgets
函数接收到的name
大小太大。 它应该接收name[0]
的大小,即fgets(name[i], sizeof name[0], stdin);
现在,您的字符串将从name[0]
到name[n-1]
进行存储,其余排序算法可以修复。
for(i=0;i< n;i++){ for(j=0;j< ni;j++) { if(strcmp(name[j],name[j+1])>0) { strcpy(temp,name[j]); strcpy(name[j],name[j+1]); strcpy(name[j+1],temp); } } } printf("The strings appears after sorting :\\n"); for(i=0;i< n;i++) printf("%s",name[i]);
内部for循环从0到ni
是,在1个外部循环的末尾,最大的元素在names[n-1]
在2个外部循环之后,对2个元素进行了排序[n-2]
和[n-1]
。 因此,无需检查这些元素。
等等。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.