数组

21 阅读1分钟

选择排序的优化

#include <stdio.h>
int main(){
    // 从键盘输入5个数,从小到大排序,输出
    int arr[5];
    // 1 2 3 5 4

    for(int i = 0; i<5;i++){
        scanf("%d", &arr[i]);
    }

    // 通过一个for循环,比较相邻的两个元素,做交换
    // 把最大的元素换到数组的最后一个位置
    for(int i = 0; i<4;i++){
        // 假设没有交换
        int isSwitch = 0;

        for(int j=0; j<4-i; j++){
            // j, j+1
            if(arr[j]>arr[j+1]){ // 做交换
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                isSwitch = 1; // 有交换
            }
        }

        // 如果一次交换都没有发生,说明已经有序啦,就不用再循环啦
        if(isSwitch == 0){
            break;
        }
    }

    for(int k=0;k<5;k++){
        printf("%d ", arr[k]);
    }
    printf("\n");
}

运行结果:

image.png