题目 1023: [编程入门]选择排序

发布时间 2023-04-06 20:17:04作者: ha_1007

找出数组无序区中的最小值(最大值),与无序区中第一个数(最后一个数)交换。

例子:5 2 3 1 4

第一轮

无序区最小值是1,将1和无序区中一个数交换:1 2 3 5 4。有序区:1,无序区:2 3 5 4

第二轮

无序区最小值是2,因为2就是无序区的第一个数,所以不用交换:1 2 3 5 4。有序区:1 2,无序区:3 5 4

第三轮

无序区最小值是3,因为3就是无序区的第一个数,所以不用交换:1 2 3 5 4。有序区:1 2 3,无序区:5 4

第四轮

无序区最小值是4,将4和无序区中一个数交换:1 2 3 4 5。有序区:1 2 3 4 (5)

排序完毕:1 2 3 4 5

 

#include <stdio.h>
int main(void) {
    int n[10]={0};
    int i, j, min, temp;    //min是数组n中最小值的下标
    for (i=0; i<10; i++) {
        scanf("%d", &n[i]);
    }
    for (i=0; i<9; i++) {    //i同时也是无序区第一个数的下标
        min = i;    //假设最小值是无序区第一个数
        //寻找最小值的下标
        for (j=i; j<10; j++) {
            if (n[j] < n[min]) {
                min = j;
            }
        }
        //如果最小值不是无序区第一个数,就把最小值和无序区第一个数交换
        if (min != i) {
            temp = n[min];
            n[min] = n[i];
            n[i] = temp;
        }
    }
    for (i=0; i<10; i++) {
        printf("%d\n", n[i]);
    }
    return 0;
}