首頁 web前端 js教程 冒泡排序、選擇排序、插入排序 | JavaScript 中的資料結構與演算法

冒泡排序、選擇排序、插入排序 | JavaScript 中的資料結構與演算法

Sep 03, 2024 am 11:43 AM

Bubble Sort, Selection Sort, Insertion Sort | Data Structures & Algorithms in JavaScript

排序演算法是許多計算任務的支柱,在組織資料以實現高效存取和處理方面發揮著至關重要的作用。無論您是剛開始探索演算法世界的初學者,還是希望刷新知識的經驗豐富的開發人員,了解這些基本排序技術都是至關重要的。在這篇文章中,我們將探討一些更基本的排序演算法 - 冒泡排序、選擇排序和插入排序。

冒泡排序

冒泡排序是一種簡單的、基於比較的排序演算法。它重複遍歷列表,比較相鄰元素,如果順序錯誤則交換它們。這個過程一直持續到不再需要交換為止,表示清單已排序。雖然冒泡排序易於理解和實現,但對於大型資料集效率較低,因此它主要適用於教育目的和小型資料集。

冒泡排序的時間複雜度為O(n2).

// a random array of 20 numbers
const inputArray = [34, 100, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45]

function bubbleSort (input) {
  const n = input.length
  const sortedArray = [...input]

  // loop n times
  for (let i = 0; i < n; i++) {
    // loop through all n-1 pairs
    for (let j = 0; j < n-1; j++) {
      // if a > b, swap; else do nothing
      if (sortedArray[j] > sortedArray[j+1]) {
        const temp = sortedArray[j]
        sortedArray[j] = sortedArray[j+1]
        sortedArray[j+1] = temp
      }
    }
  }

  return sortedArray
}

console.log("Input:", inputArray)
console.log("Ouput:", bubbleSort(inputArray))
登入後複製

選擇排序

選擇排序是一種簡單的、基於比較的排序演算法。它的工作原理是將清單分為已排序區域和未排序區域。它反覆從未排序區域中選擇最小(或最大)元素,並將其與第一個未排序元素交換,逐漸增加排序區域。選擇排序對於大型資料集來說並不是最有效的,但很容易理解,並且具有最小化交換次數的優點。

選擇排序的時間複雜度為 O(n2).

// a random array of 20 numbers
const inputArray = [34, 100, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45, 67, 89, 12, 56, 78, 90, 23, 45]

function selectionSort (input) {
  const n = input.length
  const sortedArray = [...input]

  // loop n times
  for (let i = 0; i < n; i++) {
    // start from i'th position
    let lowestNumberIndex = i
    for (let j = i; j < n-1; j++) {
      // identify lowest number
      if (sortedArray[j] < sortedArray[lowestNumberIndex]) {
        lowestNumberIndex = j
      }
    }

    // swap the lowest number with that in i'th position
    const temp = sortedArray[i]
    sortedArray[i] = sortedArray[lowestNumberIndex]
    sortedArray[lowestNumberIndex] = temp
  }

  return sortedArray
}

console.log("Input:", inputArray)
console.log("Ouput:", selectionSort(inputArray))
登入後複製

插入排序

插入排序是一種直覺的、基於比較的排序演算法,一次建構一個元素的最終排序清單。它的工作原理是從清單的未排序部分中獲取元素並將它們插入到已排序部分中的正確位置。插入排序對於小型資料集或接近排序的資料非常有效,並且在實際應用中經常用作更複雜演算法的更簡單替代方案。

插入排序的時間複雜度為O(n2).

function insertionSort (input) {
  const n = input.length
  const sortedArray = [...input]

  // loop n times, starting at index 1
  for (let i = 1; i < n; i++) {
    // start at index 1
    const comparedNumber = sortedArray[i]
    let tempIndex = i

    // compare with previous numbers (right to left)
    for (let j = i-1; j >= 0; j--) {
      // if number in current index is larger than compared number, swap
      if (sortedArray[j] > comparedNumber) {
        sortedArray[tempIndex] = sortedArray[j]
        sortedArray[j] = comparedNumber
        tempIndex = j
      } else {
        // OPTIONAL: else exit
        break
      }
    }
  }

  return sortedArray
}

console.log("Input:", inputArray)
console.log("Ouput:", insertionSort(inputArray))
登入後複製

總結

雖然冒泡排序、選擇排序和插入排序等基本排序演算法對於大型資料集可能不是最有效的,但它們為理解演算法設計提供了良好的基礎。如果您覺得這篇文章有幫助,我很想聽聽您的想法。在下面發表評論,分享您的見解,或提出您的任何問題 - 我會盡力回答。

編碼愉快!

以上是冒泡排序、選擇排序、插入排序 | JavaScript 中的資料結構與演算法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章

兩個點博物館:邦格荒地地點指南
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱門文章標籤

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

在JavaScript中替換字符串字符 在JavaScript中替換字符串字符 Mar 11, 2025 am 12:07 AM

在JavaScript中替換字符串字符

jQuery檢查日期是否有效 jQuery檢查日期是否有效 Mar 01, 2025 am 08:51 AM

jQuery檢查日期是否有效

jQuery獲取元素填充/保證金 jQuery獲取元素填充/保證金 Mar 01, 2025 am 08:53 AM

jQuery獲取元素填充/保證金

前5個日期操縱JS插件 前5個日期操縱JS插件 Feb 28, 2025 am 12:34 AM

前5個日期操縱JS插件

10個jQuery手風琴選項卡 10個jQuery手風琴選項卡 Mar 01, 2025 am 01:34 AM

10個jQuery手風琴選項卡

10值得檢查jQuery插件 10值得檢查jQuery插件 Mar 01, 2025 am 01:29 AM

10值得檢查jQuery插件

jQuery添加捲軸到Div jQuery添加捲軸到Div Mar 01, 2025 am 01:30 AM

jQuery添加捲軸到Div

HTTP與節點和HTTP-Console調試 HTTP與節點和HTTP-Console調試 Mar 01, 2025 am 01:37 AM

HTTP與節點和HTTP-Console調試

See all articles