c - 为什么这个选择排序代码没有给出正确的输出?

标签 c algorithm sorting

当我运行代码时,我得到了结果 7215这显然是不正确的。代码很好,终端没有错误,只是输出错误。请帮助我知道这是一个基本的排序算法,但我是编程新手。

#include<stdio.h>
#include<stdlib.h>
void sort(int arr[],int n);
int main()
{
   int a[]={2,7,1,5};
   sort(a,4);
   return 0;
}

void sort(int arr[],int n)
{
   int i,j,temp;
   int imin;
   for(int i=0;i<(n-2);i++)
   {
      imin=i;
      for(int j=0;j<n;j++)
      {
         if(arr[j]<arr[imin])
         {
            imin=j;
         }
      }
      temp=arr[i];
      arr[i]=arr[imin];
      arr[imin]=temp;
   }
   int k;
   for(k=0;k<n;k++)
   {
      printf("\n%d\n",arr[k]);
   }
}

最佳答案

这里有两个错误:

for(int i=0;i<(n-2);i++)

为什么-2?您错过了以这种方式比较最后一个元素的情况,应该是 -1。括号是不必要的,但添加一些空格以使其可读:

for (int i = 0; i < n-1; i++)

那么,下一个循环也是错误的:

for(int j=0;j<n;j++)

再次从 0 开始,与已排序的内容进行比较并销毁它。将其更改为:

for (int j = i+1; j < n; j++)
<小时/>

对于这样的问题,你真的应该阅读How to debug small programs 。橡皮鸭会帮助你的。

关于c - 为什么这个选择排序代码没有给出正确的输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45710609/

相关文章:

c - 使用指针在 C 中查找 char 的索引

python - 从消除排序和弦图中获得树分解

javascript - 改进我的文件 i/o 算法

javascript - 如何根据子字段的值对对象数组进行排序?

c - for 循环中的某些语句不会在每次迭代时执行

c - 使用 strstr 查找四个不同的部分单词

c - GCC 突然停止工作

algorithm - 分支定界(+扩展列表)与 Dijkstra 图算法之间的区别

查找字符串不同的第一个索引的算法?

algorithm - 哪些算法可以用来解决这种相似性最小化平衡概率?