【问题标题】:What kind of a sorting algorithm is this?这是一个什么样的排序算法?
【发布时间】:2015-04-30 05:31:10
【问题描述】:

这是一个用于对名称列表进行排序的 c 程序示例...我是算法新手,所以我需要知道它是什么类型! 我也可以将它用于哪些现实生活中的例子?

 #include<stdio.h>
 #include<string.h>
 #include<stdlib.h>

 int main() {
 char *str[5], *temp;
 int i, j, n;

 printf("\nHow many names do you want to have?");
 scanf("%d", &n);

 for (i = 0; i < n; i++) {
 printf("\nEnter the name %d: ", i);
 flushall();
 gets(str[i]);
 }

 for (i = 0; i < n; i++) {
  for (j = 0; j < n - 1; j++) {
     if (strcmp(str[j], str[j + 1]) > 0) {
        strcpy(temp, str[j]);
        strcpy(str[j], str[j + 1]);
        strcpy(str[j + 1], temp);
     }
  }
}

flushall();

printf("\nSorted List : ");
for (i = 0; i < n; i++)
  puts(str[i]);

return (0);
}

【问题讨论】:

  • 你写的时候是怎么想的?
  • 实际上,您是否尝试过运行它?它应该以可怕的方式爆炸,因为没有为字符串分配内存。
  • 在我看来像 冒泡排序。
  • 该代码具有未定义的行为,temp 在用作strcpy() 调用中的目标之前从未被初始化为有效指针。可怕的。 str[] 的内存“管理”同样缺失,它使用 gets()。哎呀。
  • @AhmedSamir 好吧,那么可以认为该特定资源的质量低于合理水平。停止使用它,因为它只会教你 cr*p,你以后将不得不忘记。

标签: c algorithm sorting computer-science


【解决方案1】:

我希望它是一个冒泡排序。有了这个,您可以按升序或降序排列数字。

【讨论】:

  • 是的,但效率低下。他本可以将for (j = 0; j &lt; n - 1; j++) 替换为for (j = 0; j &lt; n - i - 1; j++)。它会稍微更有效率。我们必须希望n 永远不会大于 5。
【解决方案2】:

首先程序是无效的。它不会在要存储字符串的地方分配内存。因此,询问用户是一个非常危险的步骤 他想要多少个名字,因为程序中没有空间存储字符串。:)

您可以对字符串使用二维可变长度字符数组,并使用标准函数fgets 而不是gets 来输入字符串。

至于排序算法,那么它是冒泡排序的错误实现。:)

【讨论】:

    猜你喜欢
    • 2020-11-16
    • 2011-02-01
    • 2014-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多