【问题标题】:Can't find the bug in my insertion sort program [closed]在我的插入排序程序中找不到错误 [关闭]
【发布时间】:2015-04-27 16:14:49
【问题描述】:
#include <stdio.h>
#include <stdlib.h>

int main()
{

    int i, j, key, p;
    int  A[] = {1, 3, 2, 4, 9, 8, 7};

    for (j=1; j<7; j++){

        key = A[j];

    //insert A[j] into the sorted sequence 

        i = j-1;
        while(i>0 && A[i]>key){
            A[i+1] = A[i];
            --i;
        }

        A[i+i] = key;

   }
   for(i=0; i<7; ++i){

       printf("%d ", A[i]);
   }

   return 0;
}

上述代码应该执行插入排序,但是,我得到了不受欢迎的排序,重复值很少。我似乎无法弄清楚我哪里出错了。

【问题讨论】:

  • 你能提供一个示例输入和输出吗?
  • 输入是内联的 - 输出是 2 3 3 4 4 8 8
  • 你用调试器单步调试了代​​码
  • A[i+i] = 键; - 看起来很奇怪,也许你的意思是 A[i+j] = key;或 A[i+1] = key;(我没有遵循算法)

标签: c algorithm sorting insertion-sort


【解决方案1】:

你有一个错字。

A[i+i] = key;

应该是

A[i+1] = key;

另外,你还有一个未使用的变量p

【讨论】:

  • 我不知道为什么这篇文章被否决了,但是任何人都可以建议它是否有问题以及如何改进它?
【解决方案2】:

您的插入排序中有两个错误。第一个由 Arun A. S. 指出

  1. A[i+1] = key; 而不是 A[i+i] = key;
  2. while(i&gt;=0 而不是 while(i&gt;0

【讨论】:

    【解决方案3】:

    您需要对代码稍作修改(错字A[i+i] = key; 不是唯一的问题)

    i = j ;
    while(i>0 && A[i-1]>key){
        A[i] = A[i-1];
        --i;
    }  
    A[i] = key;
    

    我保留了条件while(i&gt;0 并更改了偏移量,但您可以保留它们并仅更改这一行while(i&gt;=0

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-20
      相关资源
      最近更新 更多