C语言直接选择排序运行失败

2025-03-03 17:16:53
推荐回答(1个)
回答1:

你的选择排序的函数传参,传错了,select_sort(a[8],8);应该是select_sort(a,8);

a[8]在C语言中是数组a的第9个元素,而a数组只有8个元素,所以你传了一个越界的数组元素,因此出运行错误

a在C语言中是数组a的第1个元素的指针,所以可以在函数中访问到整个a数组

还有函数的定义那一句void select_sort();应该改成 void select_sort(int a[],int n);

还有需要把if(min!=i)语句移到for-j循环外面,for-i循环里面

还有把printf("%d",a[i]); 改成printf("%d ",a[i]);每输出一个元素加一个空格

完整的C语言程序如下

#include 

void select_sort(int a[],int n);

int main(){ 

 int i; int a[8]; 

 printf("请输入8个整数,将为您从小到大排序。\n"); 

 for(i=0;i<8;i++) { 

  scanf("%d",&a[i]); 

 } 

 select_sort(a,8); 

 for(i=0;i<8;i++) { 

  printf("%d ",a[i]); 

 } 

 return 0;

}

void select_sort(int a[],int n){ 

 int i,j,t,min; 

 for(i=0;i
  min=i; 

  for(j=i+1;j
   if(a[min]>a[j]) min=j; 

  } 

  if(min!=i){ //最小值不在i处的情况 

   t=a[min]; 

   a[min]=a[i]; 

   a[i]=t; 

  } 

 }

}

运行结果
请输入8个整数,将为您从小到大排序。
8 71 16 35 43 33 26 18
8 16 18 26 33 35 43 71