动图图解C语言选择排序算法,含代码分析

2022-05-31 09:24:21 浏览数 (1)

选择排序算法的原理

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。

代码实现

代码语言:javascript复制
#include <stdio.h>

#define N 5   //数组中元素的个数
void print_arr(int *); //将数组打印输出
void select_sort(int *); //选择排序

int main(){
    int arr[N] = {23,12,33,20,45}; //定义数组并初始化
    printf("排序前的数据为:n");
    print_arr(arr);
    printf("开始排序:n");
    select_sort(arr);
    printf("排序后的数据为:n");
    print_arr(arr);
}

void print_arr(int arr[]){
    //将数组循环遍历输出
    for (int i = 0; i < N; i  ) {
        printf("%dt", arr[i]);
    }
    printf("n");
}

void select_sort(int arr[]){
    int temp; //中间变量
    for (int i = 0; i < N-1; i  ) { //外层循环
        for (int j = i 1; j < N; j  ) { //内层循环
            if (arr[i] > arr[j]){ //外循环里的元素和内循环里的每一个元素比较
                //交换位置
                temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
        }
        print_arr(arr);
    }
    printf("n");
}

运行结果

代码语言:javascript复制
排序前的数据为:
23      12      33      20      45
开始排序:
12      23      33      20      45
12      20      33      23      45
12      20      23      33      45
12      20      23      33      45

排序后的数据为:
12      20      23      33      45

从运行结果可以看出:第一次扫描将23和12的位置互换 第二次扫描将23和20的位置互换 第三次扫描将23和33的位置互换 第四次扫描排序完成 为了更清楚地了解排序过程,请参照以下动图图解

图解选择排序

select

0 人点赞