原理:每一次从无序区选择一个最小的数,和无序区第一个数字进行交换
例如:有一个含有五个元素的数组,值为:3,1,9,8,4 要把他们升序排列并输出。
画下划线的地方是无序区
3,1,8,9,4(要将无序区的最小数1找出来,和无序区第一位3进行交换)
1,3,8,9,4(要将无序区的最小数3找出来,和无序区第一位3进行交换)
1,3,4,9,8(要将无序区的最小数4找出来,和无序区第一位4进行交换)
1,3,4,9,8(要将无序区的最小数8找出来,和无序区第一位9进行交换)
1,3,4,8,9
输出即可
规律:五个数字,轮了四轮,每一轮次还要进行交换
void main() {
int i, j, x,k;//j代表轮次,i代表每一轮发生几次比较,t用来进行交换,是中间变量
int a[5] = { 3,1,8,9,4 };
for (j = 0; j < 4; j++) {//五个数字用了四轮,j的范围是j<4;或j<=3都可
k = j;
for (i = j+1; i < 5; i++) {//第0轮,五个数字比较了4次,第1轮,四个数字比较了3次,第2轮,三个数字比较了2次,第3轮,两个数字比较了1次==》j+i=4==》i=4-j
if (a[i] < a[k]) {
k = i;//让无序区第一个变成无序区中最小的
x = a[j];
a[j] = a[k];
a[k] = x;
}
}
}
for (i = 0; i < 5; i++) {
printf("%d\n", a[i]);//输出即可
}
}