Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么此选择排序代码不能提供正确的输出?_C_Algorithm_Sorting - Fatal编程技术网

C 为什么此选择排序代码不能提供正确的输出?

C 为什么此选择排序代码不能提供正确的输出?,c,algorithm,sorting,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,

当我运行代码时,我得到了明显不正确的结果
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]);
   }
}
#包括
#包括
无效排序(int arr[],int n);
int main()
{
int a[]={2,7,1,5};
排序(a,4);
返回0;
}
无效排序(整数arr[],整数n)
{
int i,j,温度;
int imin;
对于(int i=0;i这里有两个错误:

for(int i=0;i<(n-2);i++)
那么,下一个循环也是错误的:

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

对于(int j=0;j您犯了一些愚蠢的错误,选择排序算法的工作原理如下:

选择排序算法通过从未排序的部分重复查找最小元素(考虑升序)并将其放在开头来对数组进行排序。该算法在给定数组中保留两个子数组

1) 已排序的子数组。 2) 未排序的剩余子阵列

在选择排序的每次迭代中,从未排序的子数组中选取最小元素(考虑升序),并将其移动到已排序的子数组中

arr[]=64 25 12 22 11

//在arr[0…4]中查找最小元素 //把它放在开头 1125122264

//在arr[1…4]中查找最小元素 //并将其放置在arr的开头[1…4] 1112252264

//在arr[2…4]中查找最小元素 //并将其放置在arr的开头[2…4] 112222564

//在arr[3…4]中查找最小元素 //并将其放置在arr的开头[3…4] 112222564

因此,您的代码应该如下所示:

#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-1);i++)
   {
      imin=i;
      for(int j=i+1;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]);
   }
}
#包括
#包括
无效排序(int arr[],int n);
int main()
{
int a[]={2,7,1,5};
排序(a,4);
返回0;
}
无效排序(整数arr[],整数n)
{
int i,j,温度;
int imin;

对于(int i=0;i代码如何可以同时是好的和错误的?@FelixPalmen:我猜它是“好的”从某种意义上说,它编译和运行时不会崩溃。很多工作都是这样的,保留它。嗯,不确定是否有必要解释算法,但可能对某人有所帮助。不过,你应该修改答案的格式,使其更具可读性。thnx先生,我明白你的意思了。现在代码工作正常:)
for (int j = i+1; j < n; j++)
#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-1);i++)
   {
      imin=i;
      for(int j=i+1;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]);
   }
}