精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

一文全面了解JavaScript最常見的十種排序算法

開發 前端
今天這篇文章,我幫大家系統梳理了一下了JavaScript 中最常見的 10 種排序方法,每種算法都包含核心原理,應用場景,時間&空間復雜度等相關內容。不管你是準備面試,還是想知識查漏補缺,這份“排序算法全家桶”都值得收藏!

在前端面試或日常開發中,排序算法是既基礎又高頻的知識點內容之一。常常會出現在開發面試中,你可能在處理表格數據、排行榜、過濾器等功能時,都遇到過“需要排序”的情況。而選擇哪種排序算法,往往會影響性能與穩定性的平衡。

為了幫助你徹底吃透排序算法,今天這篇文章,我幫大家系統梳理了一下了JavaScript 中最常見的 10 種排序方法,每種算法都包含核心原理,應用場景,時間&空間復雜度等相關內容。不管你是準備面試,還是想知識查漏補缺,這份“排序算法全家桶”都值得收藏!

下面我們開始今天的內容吧。

1. 冒泡排序(Bubble Sort)

原理:每輪比較相鄰兩個元素,若順序錯誤就交換,將“最大值”慢慢“冒泡”到最后。

function bubbleSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n - 1; i++) {
    let swapped = false;
    for (let j = 0; j < n - 1 - i; j++) {
      if (arr[j] > arr[j + 1]) {
        [arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
        swapped = true;
      }
    }
    if (!swapped) break;
  }
  return arr;
}

冒泡排序的行為類似一個雙重循環,外循環決定內循環的次數,內循環用于找到最大的數并將其放到外面。

適用場景:數據量小、初學者入門
時間復雜度:最好 O(n),最壞 O(n2)空間復雜度:O(1)是否穩定:是

2. 選擇排序(Selection Sort)

原理:每次選擇剩余數組中最小的元素,放到已排序部分的末尾。

function selectionSort(arr) {
  const n = arr.length;
  for (let i = 0; i < n; i++) {
    let minIndex = i;
    for (let j = i + 1; j < n; j++) {
      if (arr[j] < arr[minIndex]) minIndex = j;
    }
    [arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
  }
  return arr;
}

選擇排序的行為與冒泡排序相反,它每一次遍歷都是找到最小的數放在前面。

適用場景:小規模排序,不追求穩定
時間復雜度:O(n2)空間復雜度:O(1)是否穩定: 否

3. 插入排序(Insertion Sort)

原理:每次將一個元素插入到前面有序序列的正確位置。

function insertionSort(arr) {
  for (let i = 1; i < arr.length; i++) {
    let current = arr[i], j = i - 1;
    while (j >= 0 && arr[j] > current) {
      arr[j + 1] = arr[j];
      j--;
    }
    arr[j + 1] = current;
  }
  return arr;
}

插入排序類似選擇排序,也是將數組劃分為兩個區域,左邊的第一數為有序區域,右邊為無序區域,不同的是,插入排序的每次循環不是找最小數,而是直接將無序區的第一個數取出來,插入到有序區域適當位置上。

適用場景:小規模、基本有序數據
時間復雜度:最好 O(n),最壞 O(n2)空間復雜度:O(1)是否穩定:是

4. 希爾排序(Shell Sort)

原理:分組插入排序,逐漸縮小步長(gap)來優化插入排序效率。

function shellSort(arr) {
  let gap = Math.floor(arr.length / 2);
  while (gap > 0) {
    for (let i = gap; i < arr.length; i++) {
      let temp = arr[i], j = i;
      while (j >= gap && arr[j - gap] > temp) {
        arr[j] = arr[j - gap];
        j -= gap;
      }
      arr[j] = temp;
    }
    gap = Math.floor(gap / 2);
  }
  return arr;
}

希爾排序是希爾(Donald Shell)1959年提出的一種排序算法,是插入排序的改進版,也稱縮小增量排序。它是第一批沖破O(n2)的算法之一。

適用場景:中小型數組排序
時間復雜度:平均 O(n^1.3)空間復雜度:O(1)是否穩定:否

5. 歸并排序(Merge Sort)

原理:遞歸分組、排序再合并,有較強的穩定性。

function mergeSort(arr) {
  if (arr.length <= 1) return arr;
  const mid = Math.floor(arr.length / 2);
  const left = mergeSort(arr.slice(0, mid));
  const right = mergeSort(arr.slice(mid));
  return merge(left, right);
}


function merge(left, right) {
  const result = [];
  while (left.length && right.length) {
    result.push(left[0] < right[0] ? left.shift() : right.shift());
  }
  return result.concat(left, right);
}

適用場景:大型數據、追求穩定性
時間復雜度:O(n log n)空間復雜度:O(n)是否穩定:是

6. 堆排序(Heap Sort)

原理:構建最大堆,每次取出堆頂(最大元素)放末尾。

function heapSort(arr) {
  const n = arr.length;


  function heapify(i, heapSize) {
    let largest = i, left = 2 * i + 1, right = 2 * i + 2;
    if (left < heapSize && arr[left] > arr[largest]) largest = left;
    if (right < heapSize && arr[right] > arr[largest]) largest = right;
    if (largest !== i) {
      [arr[i], arr[largest]] = [arr[largest], arr[i]];
      heapify(largest, heapSize);
    }
  }


  for (let i = Math.floor(n / 2) - 1; i >= 0; i--) heapify(i, n);
  for (let i = n - 1; i > 0; i--) {
    [arr[0], arr[i]] = [arr[i], arr[0]];
    heapify(0, i);
  }
  return arr;
}

堆排序是選擇排序的一種,它是不穩定排序的一種。

適用場景:高效排序、內存控制需求
時間復雜度:O(n log n)空間復雜度:O(1)是否穩定:否

7. 快速排序(Quick Sort)

原理:選一個基準,將小于它的放左邊,大于它的放右邊,遞歸處理。

function quickSort(arr) {
  if (arr.length <= 1) return arr;
  const pivot = arr[0];
  const left = [], right = [];
  for (let i = 1; i < arr.length; i++) {
    (arr[i] < pivot ? left : right).push(arr[i]);
  }
  return [...quickSort(left), pivot, ...quickSort(right)];
}

快速排序的對冒泡排序的一種改進,一個基于分治法的排序。

適用場景:追求極致性能的排序任務
時間復雜度:平均 O(n log n),最壞 O(n2)空間復雜度:O(log n)是否穩定:否

8. 計數排序(Counting Sort)

原理:統計每個值出現的次數,重建數組。

function countingSort(arr, maxVal) {
  const count = new Array(maxVal + 1).fill(0);
  for (let num of arr) count[num]++;
  const result = [];
  for (let i = 0; i <= maxVal; i++) {
    while (count[i]-- > 0) result.push(i);
  }
  return result;
}

適用場景:數據是整數,范圍不大
時間復雜度:O(n + k)空間復雜度:O(k)是否穩定:是

9. 桶排序(Bucket Sort)

原理:將元素分散到多個“桶”中排序,最后合并。

function bucketSort(arr, bucketSize = 5) {
  if (arr.length <= 1) return arr;
  const min = Math.min(...arr);
  const max = Math.max(...arr);
  const bucketCount = Math.floor((max - min) / bucketSize) + 1;
  const buckets = Array.from({ length: bucketCount }, () => []);


  for (let num of arr) {
    const index = Math.floor((num - min) / bucketSize);
    buckets[index].push(num);
  }


  return buckets.flatMap(bucket => insertionSort(bucket));
}

適用場景:實數、數據分布均勻
時間復雜度:O(n + k),最壞 O(n2)空間復雜度:O(n + k)是否穩定:是

10. 基數排序(Radix Sort)

原理:按位比較,從最低位到最高位依次排序。

function radixSort(arr) {
  const max = Math.max(...arr);
  let exp = 1;
  while (Math.floor(max / exp) > 0) {
    countingByDigit(arr, exp);
    exp *= 10;
  }
  return arr;
}


function countingByDigit(arr, exp) {
  const output = new Array(arr.length).fill(0);
  const count = new Array(10).fill(0);


  for (let num of arr) count[Math.floor(num / exp) % 10]++;
  for (let i = 1; i < 10; i++) count[i] += count[i - 1];
  for (let i = arr.length - 1; i >= 0; i--) {
    const digit = Math.floor(arr[i] / exp) % 10;
    output[--count[digit]] = arr[i];
  }
  for (let i = 0; i < arr.length; i++) arr[i] = output[i];
}

適用場景:非負整數排序
時間復雜度:O(nk)空間復雜度:O(n + k)是否穩定:是

排序算法性能對比表

排序算法

最好

最壞

平均

空間復雜度

穩定性

冒泡排序

O(n)

O(n2)

O(n2)

O(1)

?

選擇排序

O(n2)

O(n2)

O(n2)

O(1)

?

插入排序

O(n)

O(n2)

O(n2)

O(1)

?

希爾排序

O(n log n)

O(n2)

O(n^1.3)

O(1)

?

歸并排序

O(n log n)

O(n log n)

O(n log n)


O(n)

?

堆排序

O(n log n)

O(n log n)

O(n log n)

O(1)

?

快速排序

O(n log n)

O(n2)

O(n log n)

O(log n)

?

計數排序

O(n + k)

O(n + k)

O(n + k)

O(k)

?

桶排序

O(n + k)

O(n2)

O(n + k)

O(n + k)

?

基數排序

O(nk)

O(nk)

O(nk)

O(n + k)

?

寫在最后

排序算法看似“老生常談”,但在每一場真正的算法挑戰中,它們依然是最基礎的“武器”。掌握排序,不只是為了寫出“排序函數”,更是提升你對數據結構與算法思想的理解。

責任編輯:龐桂玉 來源: web前端開發
相關推薦

2020-08-16 20:36:21

滲透測試漏洞網絡攻擊

2022-09-25 23:34:42

算法回歸算法機器學習

2023-05-15 15:29:13

設計模式JavaScript

2025-04-25 07:10:00

GenAIAI工具人工智能

2020-09-18 09:13:46

數據結構元素

2016-10-21 19:44:08

數據科學家算法

2025-04-24 08:50:00

軟件架構架構軟件系統

2023-05-17 12:33:11

AI人工智能

2025-06-16 08:22:23

2013-06-13 09:07:53

網吧網絡協議ipv6

2020-08-27 07:34:50

Zookeeper數據結構

2025-05-27 02:55:00

空指針?內存地址?

2019-08-06 09:00:00

JavaScript函數式編程前端

2022-03-14 08:01:06

LRU算法線程池

2019-10-08 09:00:00

MySQL數據庫

2024-02-01 11:57:31

this指針代碼C++

2025-06-03 09:18:11

2024-03-29 16:04:25

算法計算機算法

2023-11-20 08:18:49

Netty服務器

2023-04-26 15:43:24

容器編排容器編排工具
點贊
收藏

51CTO技術棧公眾號

午夜在线视频播放| 九一国产在线观看| 亚洲一区二区电影| 欧美香蕉大胸在线视频观看| 亚洲女女做受ⅹxx高潮| 国产精品揄拍一区二区| 国内偷拍精品视频| 美日韩中文字幕| 6080日韩午夜伦伦午夜伦| h无码动漫在线观看| 欧美孕妇孕交xxⅹ孕妇交| 美女视频一区二区三区| 欧美精品成人91久久久久久久| 免费污网站在线观看| 国产精品美女久久久久人| 日韩欧美999| 男同互操gay射视频在线看| 欧美一区二区视频| 国产福利一区二区三区| 国产精品美女免费| 国产欧美日韩另类| 亚洲成人三区| 中文字幕日韩欧美在线视频| 一本色道久久hezyo无码| 国产乱子精品一区二区在线观看| 偷拍亚洲欧洲综合| 激情图片qvod| 69久久精品| 久久久久国产精品厨房| 91九色在线免费视频| 免费av中文字幕| 亚洲人人精品| 欧美大片在线看| a级黄色免费视频| 精品一区亚洲| 亚洲精品av在线播放| 黄色a级三级三级三级| 国产亚洲一区二区手机在线观看| 亚洲妇熟xx妇色黄| 日本中文字幕一级片| 国产区高清在线| 天堂地址在线www| 毛片不卡一区二区| 日本高清不卡的在线| 久久久久久欧美精品se一二三四| 成人午夜av| 亚洲精品一区二区在线| 欧美丰满熟妇bbb久久久| 99精品美女视频在线观看热舞| 日本高清视频一区二区| 18岁视频在线观看| 欧美成人影院| 在线免费观看成人短视频| 国产精品无码av在线播放| √天堂8资源中文在线| 亚洲综合色自拍一区| 在线观看一区二区三区三州| 视频三区在线| 亚洲卡通动漫在线| 国产人妻人伦精品| 韩国成人免费视频| 亚洲成人精品影院| 欧美老熟妇喷水| av资源亚洲| 91成人免费在线视频| 三级a在线观看| 日本国产亚洲| 日韩精品一区二区三区视频播放 | 欧美久久久久久久| 四虎影视精品成人| 国产天堂亚洲国产碰碰| 亚洲国产高清福利视频| 在线观看日本一区二区| 在线日韩三级| 日韩美女一区二区三区四区| 久久久久亚洲av无码专区首jn| 大奶在线精品| 亚洲精品久久久久国产| 欧美熟妇一区二区| 欧美r级电影| 欧美成人精品不卡视频在线观看| 日韩欧美中文字幕视频| 一区二区三区四区五区在线| 日本sm极度另类视频| 国产成人av免费| 韩国欧美一区二区| 国产伦精品一区二区三区四区免费| 污视频网站免费观看| 国产亚洲人成网站| 中文字幕在线亚洲三区| 欧美人与性动交α欧美精品济南到 | 国产精品地址| 欧美综合第一页| 亚洲一区在线观| 岛国精品一区二区| 日韩影片在线播放| 毛片在线网址| 欧美午夜视频网站| 国产高潮失禁喷水爽到抽搐 | 精品国产a毛片| 波多野结衣片子| 欧美阿v一级看视频| 2024亚洲男人天堂| 99国产在线播放| 久久久久久久久久久久久久久99| 二级片在线观看| 美女100%一区| 精品少妇一区二区三区免费观看| 欧美另类z0zx974| 伊人久久亚洲热| 成人动漫网站在线观看| 天堂中文字幕在线| 一区二区三区精品在线| 少妇黄色一级片| 久久成人福利| 久久国产精品久久久久久| 国产嫩bbwbbw高潮| 成人综合在线观看| 在线无限看免费粉色视频| 最近在线中文字幕| 精品成人私密视频| 欧美大片xxxx| 亚洲最大成人在线视频| 精品一区二区三区免费视频| 精品无码久久久久久久动漫| 精品美女在线观看视频在线观看 | 91丨porny丨在线中文| 久久蜜臀中文字幕| 国产69精品久久久久999小说| 羞羞视频在线观看一区二区| 亚洲欧美另类在线观看| 日韩精品成人一区| 懂色av噜噜一区二区三区av| 男人天堂成人网| 九九热这里有精品| 中文字幕久久久| 亚洲av综合一区| 国产人妖乱国产精品人妖| 免费特级黄色片| 免费欧美网站| 欧美成人h版在线观看| 中文字幕无线码一区| 国产视频一区二区三区在线观看| 亚欧无线一线二线三线区别| 里番精品3d一二三区| 国语自产偷拍精品视频偷 | 欧美videos粗暴| 最近2019年手机中文字幕| 波多野结衣一二区| 亚洲国产精品激情在线观看| 999精品视频在线| 波多野结衣在线播放一区| 国产精品久久久久aaaa九色| 二区在线观看| 欧美日韩三级一区| 天天做夜夜爱爱爱| 国产高清久久久久| 日韩av新片网| 香蕉久久夜色精品国产更新时间 | 这里只有精品在线播放| 国产精品欧美综合| 中文字幕乱码亚洲精品一区| 高清一区在线观看| 亚洲成人国产| 不卡一区二区三区视频| av3级在线| 亚洲天天在线日亚洲洲精| 中文字幕乱码人妻无码久久| 国产精品女主播av| 青娱乐精品在线| 亚洲精一区二区三区| 久久婷婷人人澡人人喊人人爽| 成人免费无遮挡| 中文字幕欧美日韩在线| 国产99久久九九精品无码免费| 亚洲午夜激情av| 久久精品一区二区免费播放 | 亚洲成在线观看| 88久久精品无码一区二区毛片| 日本成人中文字幕在线视频| 国产a级片免费看| 精品欠久久久中文字幕加勒比| 欧美最顶级丰满的aⅴ艳星| h视频在线观看免费| 日韩午夜激情av| 黑人一级大毛片| 国产精品免费久久| 欧美日韩一区二区三区四区五区六区| 国产一区二区三区久久久久久久久| 日韩精品资源| 在线一区二区三区视频| 国产成人精品久久久| 黄色国产网站在线播放| 日韩精品视频在线播放| 夜夜躁狠狠躁日日躁av| 精品国产91乱高清在线观看| 精品女人久久久| 99国产欧美久久久精品| 亚洲美女性囗交| 亚洲一区二区三区四区五区午夜 | 欧美色爱综合网| 国产精品6666| 中文字幕中文字幕在线一区| 99久久国产精| 韩国成人福利片在线播放| 国产av无码专区亚洲精品| 91精品国产91久久久久久黑人| 欧美日韩精品中文字幕一区二区| 国产精品成人**免费视频| 日韩美女视频在线观看| heyzo一区| 久久精品一区中文字幕| 搞黄视频在线观看| 日韩国产欧美精品在线 | 国产精品一品二品| 538在线视频观看| 国产亚洲一级| 欧美一区二区视频在线播放| 色乱码一区二区三区网站| 美女黄毛**国产精品啪啪| av自拍一区| 亚洲在线免费视频| 韩国精品视频在线观看| 国产成人综合亚洲| 涩涩视频在线| 97在线免费观看视频| 伊人春色在线观看| 日韩一区二区久久久| 国产一区精品| 亚洲色图13p| 视频三区在线观看| 日韩成人高清在线| 色综合久久久久久| 欧美成人vr18sexvr| 国产情侣自拍小视频| 欧美老年两性高潮| 在线免费看av片| 精品视频全国免费看| 亚洲图片在线视频| 色网站国产精品| 日本黄色一级视频| 欧洲精品中文字幕| 中文字幕日本视频| 欧洲精品在线观看| 亚洲专区在线播放| 欧美日本在线视频| 91精品国产乱码久久久久| 欧美日韩国产天堂| 国产精品国产av| 欧美一区日韩一区| 亚洲成人久久精品| 亚洲成人av在线| 五月婷婷六月色| 亚洲精品视频免费| 国产在线观看网站| 日韩一区二区精品视频| 成人在线观看免费网站| 久久99国产精品自在自在app | 一起操在线视频| 精品无码三级在线观看视频| 在线视频一二区| 国产成人aaa| 成人免费av片| 欧美国产一区二区在线观看| 国产调教在线观看| 成人欧美一区二区三区| 欧美另类视频在线观看| 亚洲国产一区二区三区青草影视| 日韩精品成人在线| 日本乱码高清不卡字幕| 91精品国产乱码久久| 日韩欧美aaaaaa| 午夜视频在线免费播放| 亚洲日韩中文字幕| av大大超碰在线| 啪一啪鲁一鲁2019在线视频| 国产精品久久久久77777丨| 91免费的视频在线播放| 国产精品色呦| 日韩久久在线| 欧美高清日韩| 男人添女人下面高潮视频| 青青国产91久久久久久| 老女人性生活视频| 久久日一线二线三线suv| 久久一级免费视频| 午夜免费久久看| 伊人久久国产精品| 亚洲国产高清高潮精品美女| 成人在线观看免费| 久久99国产精品久久久久久久久| 中日韩脚交footjobhd| 成人性教育视频在线观看| 欧美在线导航| 佐佐木明希av| 久久一二三区| 亚洲美女精品视频| 中文字幕欧美日韩一区| 激情综合网五月婷婷| 欧美亚洲动漫另类| 人妻少妇一区二区三区| 日韩在线精品视频| 国内激情视频在线观看| 精品在线观看免费| 日韩一级理论片| 成人动漫一区二区| 国产在线免费av| 五月激情丁香一区二区三区| 国产一区二区在线播放视频| 日韩不卡在线观看| 伊人在我在线看导航| 国产欧美日韩免费看aⅴ视频| 无码少妇一区二区三区| 国产香蕉一区二区三区| 美女任你摸久久| 亚洲国产欧美视频| 亚洲午夜在线视频| 国产精品久久久国产盗摄| 亚洲色图17p| gay欧美网站| 国产区一区二区三区| 中文字幕一区二区三区乱码图片| 午夜免费精品视频| 久久久美女艺术照精彩视频福利播放| 久久激情免费视频| 欧美一区二区在线视频| 69视频在线| 国产精品麻豆va在线播放| 嫩草一区二区三区| 黄色免费视频大全| 成人av网站免费| 久久精品日产第一区二区三区乱码 | 欧美成人午夜77777| 黄色一级视频播放| 国产综合色精品一区二区三区| 毛片久久久久久| 欧美午夜片在线观看| 国产h视频在线观看| 国产精品精品久久久| 国产欧美日韩一区二区三区四区| 午夜肉伦伦影院| 久久久三级国产网站| 免费看毛片网站| 国产午夜精品一区二区三区| 亚洲成人短视频| 日本精品一区二区三区视频| 麻豆9191精品国产| 无码人妻精品一区二区中文| 色偷偷一区二区三区| 国产高清一区在线观看| 国产精品久久久久久一区二区| 国产一区二区三区探花| 精品1区2区3区| 懂色av一区二区三区四区| 欧美激情性做爰免费视频| 成人黄色av网址| 丁香花在线影院观看在线播放| 成人小视频在线观看| 成人免费区一区二区三区| 亚洲女人天堂成人av在线| 三上悠亚激情av一区二区三区 | 天天影视色香欲综合网老头| 五月天婷婷视频| 国产经典一区二区| 久久婷婷蜜乳一本欲蜜臀| 国产精品久久久久久9999| 玉米视频成人免费看| 天堂网av2014| 国产成一区二区| 一区二区影视| 国产一级免费片| 91福利视频网站| 国产丝袜在线| 国产精品乱码视频| 免费在线亚洲欧美| 你懂得在线观看| 欧美刺激脚交jootjob| 在线天堂中文资源最新版| 亚洲一二三区精品| 国产成人午夜视频| 高潮毛片又色又爽免费 | 色诱色偷偷久久综合| 国产精品一区二区三区毛片淫片| 欧美在线视屏| 朝桐光av一区二区三区| 欧美吻胸吃奶大尺度电影| 在线三级中文| 欧美最大成人综合网| 国产精品 日产精品 欧美精品| 日韩精品――中文字幕| 色老头一区二区三区| 成人h动漫免费观看网站| 亚洲精品中文字幕无码蜜桃| 亚洲天天做日日做天天谢日日欢| 色呦呦中文字幕| 91午夜在线播放| 日日噜噜夜夜狠狠视频欧美人| 强行糟蹋人妻hd中文| 国产一区二区三区在线免费观看| 亚洲国产一区二区三区网站|