数据结构与算法之排序: 选择排序 (Javascript版)

排序

  • 排序:把某个乱序的数组变成升序或降序的数组 (这里用数组来做举例)

选择排序

  • 该排序属于 贪心 策略
  • 关注的是局部,是一种苟且的东西

算法实现

// 随机数组,选择排序
Array.prototype.selectionSort = function() {
    let len = this.length;
    for(let i=0; i<len-1; ++i) {
        let minIndex = i; // 注意这里更新
        for(let j=i;j<len;++j) {
            if(this[j] < this[minIndex]) {
               minIndex = j; // 循环更新最小值
            }
        }
        // 最小值与内层循环开始位置进行交换, 通过if做一下优化
        if(i !== minIndex) {
            [this[i], this[minIndex]] = [this[minIndex], this[i]]; // ES6 交换
        }
        
    }
}

let arr = [5,4,3,2,1]
arr.selectionSort()
console.log(arr); // [1, 2, 3, 4, 5]
  • 性能不好,比较简单,贪心
  • 找到数组中最小值,选中它并将其放置于第一位(第一轮)
  • 接着找到第二小的值,选中它并将其放置在第二位(第二轮)
  • 以此类推,执行n-1轮
  • 注意,每一轮比较完毕,前面的都是有序的,可以跳过,不再比较
  • 时间复杂度
    • O(n^2)

你可能感兴趣的:(Data,Structure,and,Algorithms,算法,选择排序,排序)