JavaScript选择排序

162 阅读2分钟

JavaScript选择排序

选择排序的实现思路:从未排序的序列中找到最小的元素,放到已排序的序列末尾,重复上述步骤,直到所有元素排序完毕。

排序流程:

  1. 假设未排序序列的第一个值是最小值,用minIndex记录该元素下标,从前往后比较
  2. 若某元素比该元素小,则更新该元素下标到minIndex
  3. 循环一轮后,如果最小元素下标不为未排序序列第一个元素下标,则进行交换
  4. 重复上述步骤,直到排序完成

动画演示:

c7322fccb46e3cc0ea3c107781d1e880.gif

未排序序列:3,44,38,5,47,15,36,26,27,2,46,4,19,50,48

第一趟排序:(2),44,38,5,47,15,36,26,27,(3),46,4,19,50,48

第二趟排序:(2,3),38,5,47,15,36,26,27,(44),46,4,19,50,48

第三趟排序:(2,3,4),5,47,15,36,26,27,44,46,(38),19,50,48

...

第十四趟排序:(2,3,4,5,15,19,26,27,36,38,44,46,47),50,48

最后一趟排序:(2,3,4,5,15,19,26,27,36,38,44,46,47,48,50)

选择排序算法分析:

平均时间复杂度:O(n²)

空间复杂度:O(1),原地排序,辅助空间相对于数据量而言是个常数

稳定性:不稳定 [3,3,1]

算法实现:

function selectSort(arr) {
     for (let i = 0; i < arr.length - 1; i++) {
             let index = i;
             for (let j = i + 1; j < arr.length; j++) {
                  if (arr[index] > arr[j]) { //逐个比较
                      index = j; //保存最小值索引
                   }
             }
             if(index !== i) { //如果最小值的下标不与未排序序列第一个数的下标相同,则交换顺序
                  let temp = arr[i]
                  arr[i] = arr[index]
                  arr[index] = temp
             }
      }
      return arr
}
let arr = [11,20,15,7,9,13]
console.log(`选择排序前:${arr}`)
console.log(`选择排序后:${selectSort(arr)}`)