为什么选择排序法最后将a[min]和a[i]互换要放在if语句外才能实现?
问题描述:
#include<stdio.h>
int main()
{
void sort(int a[],int n);
int i,a[10];//定义数组营首地址和数组长度
printf("please input the original array:");
for(i=0;i<10;i++)
scanf("%d",&a[i]);//输入十个数
sort(a,10);//调用函数sort对这十个数进行排序
for(i=0;i<10;i++)
printf("%5d",a[i]);//输出排序后的十个数
printf("\n");
return 0;
}
void sort(int a[],int n)//n是指数组长度
{
int min,i,j,t;
for(i=0;i<n-1;i++)//数组中的前n-1个数(除最后一个数外)都要进行一趟循环
{
min=i;//假设此趟循环中的最小值就是当前值i
for(j=i+1;j<n;j++)//第i个数要和后面的每个值比较,与i比较的值记作j
if(a[min]>a[j])//若后面的数j更小,则
min=j;//记住此时j的下标
t=a[i];a[i]=a[min];a[min]=t;//将a[i]和a[j]交换位置
}
}
答
emmm也可以吧,只是在if里交换就是交换排序而不是选择排序了
答
你有通过 if 语句判断当前有比min更小的数,才互换数字,放到外面,每次循环互换。
你可能没搞懂这个算法是干什么的。冒泡排序,将一堆数字,排列成有序的数字