排序算法-选择排序

一、原理解析

第一轮:从数组中找到最小的数字,和第一个数字交换位置

第二轮:从第二个数字开始,找到最小的数字,和第二个数字交换位置

...

就像排队一样,每次从未排好的队伍中“选择”一个最矮的,依次放到队伍的第一位、第二位...

二、范例演示

以下表格里,红色表示选中的待排序的数字,蓝色表示最终排好的数字。

第一轮:

  1. 数组中找到最小值 3, 和数组第一个数10交换位置

第二轮:

  1. 从第二个数开始,数组中找到最小值 10, 和数组第二个数34交换位置

第三轮:

  1. 从第三个数开始,数组中找到最小值 21, 和数组第三个数21交换位置(自己不用交换)

...

image

三、实现方式

function sectionSort(arr) {
  for(let min = i = 0; i < arr.length /*i代表轮数*/; i++) {
    min = i
    for(let j = i + 1; j < arr.length; j++) {
      if(arr[min] > arr[j]) {
        min = j
      }
    }
    [ arr[i], arr[min] ] = [ arr[min], arr[i] ] //把每轮的第一个和当前轮的最小值交换位置
  }
}

var arr = [10, 34, 21, 47, 3, 28]
sectionSort(arr)
console.log(arr)

复杂度分析

时间复杂度为 O(n^2) 。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容