排序演算法是許多計算任務的支柱,在組織資料以實現高效存取和處理方面發揮著至關重要的作用。無論您是剛開始探索演算法世界的初學者,還是希望刷新知識的經驗豐富的開發人員,了解這些基本排序技術都是至關重要的。在這篇文章中,我們將探討一些更基本的排序演算法 - 冒泡排序、選擇排序和插入排序。
冒泡排序是一種簡單的、基於比較的排序演算法。它重複遍歷列表,比較相鄰元素,如果順序錯誤則交換它們。這個過程一直持續到不再需要交換為止,表示清單已排序。雖然冒泡排序易於理解和實現,但對於大型資料集效率較低,因此它主要適用於教育目的和小型資料集。
冒泡排序的時間複雜度為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中文網其他相關文章!