关于c语言的选择法排序

请问下各位前辈,c语言的选择法排序,比如下面这个从小到大排五个数,为什么下标要在开始设成i,然后为什么两个值交换的步骤不是在if语句里面,拜托了!

img

i 从 0开始,把min设成 i 的意思是,每次循环,找到第(i+1)小的数据,并用min记录下标,然后把这个数放在a[i]位置。
过程:
当i =0 是,min=0,默认此时的最小值就是a[0],然后遍历a[1]以后的数据,找到最小的数据,并用min记录其下标,最后,把a[min]放在a[0]的位置。也就是a[0]是数组中的最小值。然后继续循环
i=1,min=i=1,默认此时的最小值就是a[1],因为最小值已经放在a[0]了,所以从a[i+1]开始找剩余数据中的最小值,并用min记录下标,然后把它放在a[1]位置。
后面的以此类推
所以,每次找最小值的时候,先默认当前位置的值就是该位置的最小值,然后遍历它后面的所有数,找到后面所有数中的最小值,然后把最小值放在当前位置。

就是每次循环以第i个为参考值,逐个比较i之后的所有数当中的最小值,然后将最小值与第i个数进行交换
在循环外交换,是因为循环过程是为了找出从第i个开始后的所有数中的最小值。比较结束后,将得到的最小值与第i个值交换,使得每次循环找出剩余数中的最小值

要在开始设i为了定义i,方便下面使用;可以不在里面,if满足之后交换了下标,然后下面的就是交换;如果if不满足,直接执行下面,min=i;交换了还是原来的,相当于没交换;