美文网首页
02选择排序

02选择排序

作者: BubbleM | 来源:发表于2019-06-02 18:34 被阅读0次

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

选择排序算法步骤:

  1. 首先在未排序序列中找到最小元素,与第一个元素进行交换,让最小的元素在排序最前面。
  2. 再从剩余未排序n-1个元素中继续寻找最小元素,然后与第二个元素交换位置。
  3. 重复第二步,第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。

以下面5个无序的数据为例:
56 12 80 91 20(文中仅细化了第一趟的选择过程)

  • 第1趟:12 56 80 91 20


    第一趟对比过程.png
  • 第2趟:12 20 80 91 56
  • 第3趟:12 20 56 91 80
  • 第4趟:12 20 56 80 91
let arr = [56, 12, 80, 91, 20];

function selectSort(arr) {
  for (let i = 0; i < arr.length - 1; i++) {
    for (let j = i + 1; j < arr.length; j++) {
      if (arr[j] < arr[i]) {
        let temp = arr[j];
        arr[j] = arr[i];
        arr[i] = temp;
      }
    }
    console.log(arr)
  }
  return arr;
}

console.log(selectSort(arr)) // [ 12, 20, 56, 80, 91 ]

平均时间复杂度:O(n2)
空间复杂度:O(1) (用于交换和记录索引)
稳定性:不稳定 (比如序列【5, 5, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动到第二个5后面)

排序前:56,12,80,91,20
排序中!!调整:12,56,80,91,20
排序中!!不调整:12,56,80,91,20
排序中!!不调整:12,56,80,91,20
排序中!!不调整:12,56,80,91,20
排序后:12,56,80,91,20
-------------------
排序前:12,56,80,91,20
排序中!!不调整:12,56,80,91,20
排序中!!不调整:12,56,80,91,20
排序中!!调整:12,20,80,91,56
排序后:12,20,80,91,56
-------------------
排序前:12,20,80,91,56
排序中!!不调整:12,20,80,91,56
排序中!!调整:12,20,56,91,80
排序后:12,20,56,91,80
-------------------
排序前:12,20,56,91,80
排序中!!调整:12,20,56,80,91
排序后:12,20,56,80,91
-------------------
最终结果:12,20,56,80,91
image.png

相关文章

  • 02选择排序

    选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越...

  • 02选择排序

  • 排序算法02:选择排序

    算法介绍 首先,从[0,len]中找到数组中最小的元素,让它与第一个元素交换。接着从[1,len]中找出最小的元素...

  • 小马哥2019年9月最新-恋上数据结构与算法(第二季)

    【目录】 │01.冒泡、选择、堆排序.mp4 │02.插入排序.mp4 │03.归并排序.mp4 │04.快速、希...

  • 算法-选择排序

    算 法:选择排序算法时间复杂度: 选择排序算法概述 选择排序伪代码 选择排序实现 选择排序算法概述 排序算法有许...

  • 常见排序算法

    这里介绍四种排序算法,选择排序、快速排序、归并排序、计数排序 选择排序(使用递归) 选择排序(使用循环) 快速排序...

  • 常用的两种排序-冒泡、选择

    Swift版 冒泡排序 选择排序 OC版 冒泡排序 选择排序

  • DOM操作四-BOM对象

    01-选择水果(简单版) 02-选择水果(封装版) 03-水果排序(终极版) 04-在线用户 05-祝愿墙 06-...

  • 数据结构之排序

    选择排序1.直接选择排序 原理直接选择排序过程直接选择排序过程 实现: DataWrap.java来模拟待排序的数...

  • 记录几个常见的排序算法

    常见的排序有:快速排序、冒泡排序、希尔排序、选择排序、插入排序、归并排序 冒泡排序: 插入排序: 选择排序: 希尔...

网友评论

      本文标题:02选择排序

      本文链接:https://www.haomeiwen.com/subject/qlgtextx.html