【Day 08】Sorting:Selection Sort 选择排序法 ( 用 JavaScript 学演算法 )

选择排序法的概念是,将阵列分为两个部分,每次扫描未排序的部分时,从数列中拿出最小的数,丢到另一边,最後就会得到一个完成排序的阵列。它的时间复杂度是 O(n^2)。

一、步骤观察

  • 将阵列视为已排序(标记)、未排序两个部分
  • 遍历未排序的阵列
    • 从未排序的阵列中,取出最小值
    • 与第一个值替换位置
    • 向右移动标记

二、实际操作

使用哪种资料结构:Array

  • 遍历阵列
    • 将第一个元素设定为最小值
    • 遍历未排序的元素
      • 如果未排序元素 < 当前最小值
        • 将未排序元素设定为当前最小值
    • 将最小值和第一个未排序的元素交换位置

逻辑:

  arr <- an unsorted array of integers
  let len be the length of arr

  for i (0 to len-1) do
    let minIndex = i

    for j (i+1 to len-1) do
      if (arr[j] < arr[minIndex]) then
        minIndex = j
      end if
    end for
    swap(arr, i, minIndex)
  end for

  func swap(arr, firstIndex, minIndex):
    temp = arr[firstIndex]
    arr[firstIndex] = arr[minIndex]
    arr[minIndex] = temp
  end func

程序码实作:

debugger

function swap(arr, firstIndex, minIndex) {
  temp = arr[firstIndex]
  arr[firstIndex] = arr[minIndex]
  arr[minIndex] = temp
}

function selectionSort(arr) {

  for (let i = 0; i < arr.length; i++) {
    let minIndex = i

    for (j=i+1 ; j<arr.length ; j++) {
      minIndex = (arr[j]<arr[minIndex]) ? j : minIndex
    }

    swap(arr, i, minIndex)
    console.log(arr)
  }
}

selectionSort([8, 9, 2, 5, 1])

三、时间复杂度 Big O

  • 总共比较了 1+2+3+…+(n-1)
  • 也就是 (n+1) * n / 2
  • 时间复杂度会忽略系数,所以为 O(n^2)

<<:  AE-LED流动效果4-Day22

>>:  Proxmox VE 安装虚拟机:Windows 10 (三)

大数据平台:技术架构 - 相关技术列举

大数据的价值在於技术的发展与应用,提升资料采撷、储存及计算能力,才能提升企业核心竞争力。 大数据平台...

D8 - 如何用 Google Apps Script 将 Google Calendar 上的事件与更新全部列出到 Google Sheet 上?

来到了第 8 天。但一样先讲结论,如果你很急着用,可以直接使用这份 Add-On: Calendar...

全端入门Day12_安装IDE

昨天介绍完IDE了,那麽今天就要来实作了,直接进入今天的主题: 安装VS Code 使用收寻引擎打V...

IOS、Python自学心得30天 Day-20 .h5 to .tflite to .mlmodel

前言: 这一两天我一直很想把.h5档案或是.pb档案 直接转成Xcode可用的.mlmodel档案 ...