侧边栏壁纸
博主头像
神奇的程序员

今天的努力只为未来

  • 累计撰写 170 篇文章
  • 累计创建 27 个标签
  • 累计收到 226 条评论

目 录CONTENT

文章目录

排序算法:选择排序

神奇的程序员
2020-03-05 / 0 评论 / 14 点赞 / 645 阅读 / 1,177 字 正在检测是否收录...

前言

选择排序,作为经典的排序算法。与冒泡排序一样,在面试中也常常会被问到,如果你没有掌握,那面试也就结束了😅

本文采用图文的方式讲解选择排序的特点,分步骤讲解js的实现思路以及相对应的代码,欢迎各位感兴趣的开发者阅读本文😋

概念

从待排序的数据中寻找最小值,将其与序列最左边的数字进行交换,重复这一操作的算法即选择排序

特点

  • 线性查找数组中的最小值
  • 找到最小值后与序列中的比较值进行交换
  • 交换完毕后1轮结束
  • 新的一轮比较值的位置为当前轮数
  • 重复上述操作,直至比较到序列的最后一个元素。

图解示例

如图所示,将下列数据按照从小到大的顺序进行排列。

  • 用序列的1号元素与其之后的元素进行线性比较,找到最小值1。
  • 将找到的最小值与序列的1号元素进行位置调换,1轮操作完成。
  • 开始新一轮的比较,用序列的2号元素与其之后的元素进行线性比较,找到最小值2
  • 将将找到的最小值与序列的2号元素进行位置调换。
  • 重复上述操作,新一轮比较的元素位置为当前轮数,直至比较到序列的最后一个元素,则排序完成。

实现思路

  • 声明一个函数,参数为一个数组
  • 遍历数组,将数组中的值与其之后的元素进行比较,找到最小值
  • 找到最小值后,将当前比较的值与最小值进行位置互换
  • 直至遍历到最后一个元素,排序结束。

接下来,我们用JavaScript根据实现思路来实现下选择排序。

/**
 * 1. 从数组的0号元素开始和之后的元素进行大小比较
 * 2. 找到最小值后,将最小值与当前比较值进行位置互换
 * 3. 重复上述操作,当前轮数则为比较元素的位置,直至最后一轮的比较
 */

const selectSort = function (arr) {
    for (let i = 0; i < (arr.length-1); i++){
        // 最小值
        let min = arr[i];
        // 最小值位置
        let minIndex = i;
        // 比较次数
        let round = 0;
        for (let j = i+1; j<arr.length; j++){
            round ++;
            if(min>arr[j]){
                // 如果最小值大于当前比较值,则进最小值赋值当前遍历到的值
                min = arr[j];
                minIndex = j;
            }
        }
        console.log(`第${i+1}轮结束: ${arr},最小值${min},最小值位置${minIndex},共比较${round}次`);
        // 位置互换
        [arr[i],arr[minIndex]] = [min,arr[i]];
    }
    return arr;
};

const arrData = [4,6,7,8,9,1,2,3,4];
console.log(selectSort(arrData));

执行结果

写在最后

  • 文中使用的图片源自《我的第一本算法书》,如若侵权,请评论区留言,作者立即删除相关图片。
  • 文中如有错误,欢迎在评论区指正,如果这篇文章帮到了你,欢迎点赞和关注😊
  • 本文首发于掘金,未经许可禁止转载💌
14

评论区