繁体   English   中英

C气泡排序算法

[英]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]);
}

此代码有一些细微的错误

  1. 您正在运行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);

  1. 现在,您的字符串将从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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM