基础算法【2】:选择排序SelectionSort

选择排序详解
本文深入解析了选择排序算法的原理及其实现过程。介绍了通过在指定范围内寻找最小元素,并将其与当前索引位置的元素进行交换的基本操作,最终完成整个数组的排序。同时,也提到了选择排序的逆向实现——寻找最大元素并进行交换的方法。
  1. 选择排序:

    1. 给定 N 个项目和 L = 0 的数组,选择排序将:

      1. 在 [L ... N-1] 范围内找出最小项目 X 的位置,

      2. 用第 L 项交换X,

      3. 将下限 L 增加1并重复步骤1直到 L = N-2。

    2. 在不失普遍性的情况下,我们也可以实现反向的选择排序:找到最大项目 Y 的位置并将其与最后一个项目交换。

  2. 代码:


void SelectionSort(int *arr, int num)
{
    int ret = 0;
    int sorted, index, min_index;  
    int tmp = 0;

    for (sorted = 0; sorted <= num - 2; sorted++) {  // L
        min_index = sorted;

        for (index = sorted; index < num; index++) { // [L...N-1]
            if (arr[min_index] > arr[index]) {
                min_index = index;
            }
            printf("%2d-%2d\n", sorted, index);
        }

        if (min_index != sorted) {
            printf("[%2d<->-%2d]: %2d <--> %2d\n", sorted, min_index, arr[sorted], arr[min_index]);
            tmp = arr[sorted];
            arr[sorted] = arr[min_index];
            arr[min_index] = tmp;
        }
    }

    return;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值