if(k!=i)//没有这句也行的 只不过可能多了一次无谓的交换

爱上你 是 我的错 可是离 开 又舍不得 听着你为我写的歌 好难过
如果说 我说如果 我们还 能 重新来过 不去计 较 谁对谁错 会怎么做
程序代码:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i, a[] = { 1, 5, 4, 3, 6, 7, 8, 9, 7, 2};
/* 开始排序 */
for (i = 0; i < 10; i++)
{
/* m为当前数组最小的元素,j为子循环下标 */
int m = i, j;
/* j从i+1循环到末尾,这个区间即为当前排序部分,本循
* 环将在这个区间寻找最小的值
*/
for (j = i + 1; j < 10; j++)
/* 如果当前的最小值大于当前值,则当前值作为最小值 */
if (a[m] > a[j]) m = j;
/* 如果最小值不是排序部分的第一个值,则将最小值与
* 第一个值进行交换,这样就能保证每次排序,第一个值
* 都是当前序列的最小值,然后排序部分渐渐缩小,当
* 排序部分为空的时候,整个数组排序完成
*/
if (m != i)
{
int t = a[m];
a[m] = a[i];
a[i] = t;
}
/* 综上所知,最后的判断是可有可无的,如果当前最小的元
* 素就是排序部分的第一个元素的话,原则上是不需要交换
* 的,但是即使交换,也不会有任何影响,这个判断,可写
* 可不写,这里因为使用局部变量,所以写了这个判断,这
* 样就可以在复合语句中定义局部变量了。
*/
}
/* 打印排序后的值 */
for (i = 0; i < 10; i++)
printf("%d%c", a[i], i == 9 ? '\n' : ',');
return 0;
}