为什么选择排序法最后将a[min]和a[i]互换要放在if语句外才能实现?

为什么选择排序法最后将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更小的数,才互换数字,放到外面,每次循环互换。

你可能没搞懂这个算法是干什么的。冒泡排序,将一堆数字,排列成有序的数字