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; }