学习首页/排序算法/选择排序交互演示 · JavaScript

排序算法 SELECTION SORT

选择排序.

扫描未排序区间,选出最小值放到区间起点。

时间O(n²)额外空间O(1)稳定性不稳定

原理与执行逻辑

每轮从未排序区间中找出最小值,交换到该区间的第一个位置。随着区间起点右移,左侧的最终有序前缀逐渐增长。

执行步骤

  1. 用 i 标记本轮需要填入最小值的位置。
  2. 扫描 i 后面的所有元素,更新最小值下标 min。
  3. 扫描结束后交换 a[i] 与 a[min]。
  4. 将 i 右移,重复直到剩余一个元素。

关键理解

每轮必须完成扫描才能确定最小值,已有序输入也需要比较。远距离交换可能改变相等元素的相对顺序。

简短示例

[3, 1, 2] 第一轮找到 1,与首位交换得到 [1, 3, 2];第二轮将 2 放到中间。

代码与执行动画

STEP 0 / 49
选择排序
function selectionSort(arr) {  for (let i = 0; i < arr.length - 1; i++) {    let min = i;    for (let j = i + 1; j < arr.length; j++) {      if (arr[j] < arr[min]) min = j;    }    [arr[i], arr[min]] = [arr[min], arr[i]];  }  return arr;}
10 行 · 0 个片段标记

高亮对应当前步骤;源码对传入数组进行原地排序。

数组状态

升序 · 8 个元素
比较 0实际交换 0数组写入 0当前区间 —
待排序当前操作已就位

下标显示在底部;柱体随元素移动,等值元素也保留独立身份。

0

准备排序

点击下一步或自动播放,观察数组从左到右升序排列的过程。

调整待排序数组

使用相同数据切换算法,观察比较与交换过程。

2 至 12 个整数,范围 1 至 99;逗号或空格分隔。

算法要点

选择排序的执行规则

每轮只交换一次,但仍需扫描剩余元素。已确定的前缀用绿色标记。

交换次数仅统计两个不同位置的交换;可输入重复值。

对应题目与扩展练习

观察执行过程后,按题目约束调整输入、返回值与实现。链接打开官方题目页面。

  • 排序应用练习,可使用选择排序;进阶的一趟扫描要求需要另外实现线性算法。