成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

面試官:說說你對快速排序的理解?如何實現?應用場景?

開發 前端
快速排序(Quick Sort)算法是在冒泡排序的基礎上進行改進的一種算法,從名字上看就知道該排序算法的特點是快、效率高,是處理大數據最快的排序算法之一。

[[428697]]

本文轉載自微信公眾號「JS每日一題」,作者灰灰 。轉載本文請聯系JS每日一題公眾號。

一、是什么

快速排序(Quick Sort)算法是在冒泡排序的基礎上進行改進的一種算法,從名字上看就知道該排序算法的特點是快、效率高,是處理大數據最快的排序算法之一

實現的基本思想是:通過一次排序將整個無序表分成相互獨立的兩部分,其中一部分中的數據都比另一部分中包含的數據的值小

然后繼續沿用此方法分別對兩部分進行同樣的操作,直到每一個小部分不可再分,所得到的整個序列就變成有序序列

例如,對無序表49,38,65,97,76,13,27,49進行快速排序,大致過程為:

首先從表中選取一個記錄的關鍵字作為分割點(稱為“樞軸”或者支點,一般選擇第一個關鍵字),例如選取 49

將表格中大于 49 個放置于 49 的右側,小于 49 的放置于 49 的左側,假設完成后的無序表為:{27,38,13,49,65,97,76,49}

以 49 為支點,將整個無序表分割成了兩個部分,分別為{27,38,13}和{65,97,76,49},繼續采用此種方法分別對兩個子表進行排序

前部分子表以 27 為支點,排序后的子表為{13,27,38},此部分已經有序;后部分子表以 65 為支點,排序后的子表為{49,65,97,76}

此時前半部分子表中的數據已完成排序;后部分子表繼續以 65 為支點,將其分割為{49}和{97,76},前者不需排序,后者排序后的結果為{76, 97}

通過以上幾步的排序,最后由子表{13,27,38}、{49}、{49}、{65}、{76,97}構成有序表:{13,27,38,49,49,65,76,97}

二、如何實現

可以分成以下步驟:

分區:從數組中選擇任意一個基準,所有比基準小的元素放在基準的左邊,比基準大的元素放到基準的右邊

遞歸:遞歸地對基準前后的子數組進行分區

用代碼表示則如下:

  1. function quickSort (arr) { 
  2.   const rec = (arr) => { 
  3.     if (arr.length <= 1) { return arr; } 
  4.     const left = []; 
  5.     const right = []; 
  6.     const mid = arr[0]; // 基準元素 
  7.     for (let i = 1; i < arr.length; i++){ 
  8.       if (arr[i] < mid) { 
  9.         left.push(arr[i]); 
  10.       } else { 
  11.         right.push(arr[i]); 
  12.       } 
  13.     } 
  14.     return [...rec(left), mid, ...rec(right)] 
  15.   } 
  16.   return res(arr) 
  17. }; 

快速排序是冒泡排序的升級版,最壞情況下每一次基準元素都是數組中最小或者最大的元素,則快速排序就是冒泡排序

這種情況時間復雜度就是冒泡排序的時間復雜度:T[n] = n * (n-1) = n^2 + n,也就是O(n^2)

最好情況下是O(nlogn),其中遞歸算法的時間復雜度公式:T[n] = aT[n/b] + f(n),推導如下所示:

關于上述代碼實現的快速排序,可以看到是穩定的

三、應用場景

快速排序時間復雜度為O(nlogn),是目前基于比較的內部排序中被認為最好的方法,當數據過大且數據雜亂無章時,則適合采用快速排序

參考文獻

https://baike.baidu.com/item/%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95/369842

 

https://www.cnblogs.com/l199616j/p/10597245.html

 

責任編輯:武曉燕 來源: JS每日一題
相關推薦

2021-10-08 09:59:32

冒泡排序場景

2021-10-09 10:25:41

排序應用場景

2021-10-12 07:15:02

歸并排序場景

2021-10-11 09:38:41

開源

2021-09-28 07:12:09

測試路徑

2021-09-29 07:24:20

場景數據

2021-09-16 07:52:18

算法應用場景

2021-11-09 08:51:13

模式命令面試

2021-11-05 07:47:56

代理模式對象

2021-11-10 07:47:49

組合模式場景

2021-11-03 14:10:28

工廠模式場景

2021-08-16 08:33:26

git

2021-09-06 10:51:27

TypeScriptJavaScript

2021-11-22 23:50:59

責任鏈模式場景

2021-11-11 16:37:05

模板模式方法

2021-10-14 07:55:20

二分查找面試

2021-09-10 06:50:03

TypeScript裝飾器應用

2021-09-08 07:49:34

TypeScript 泛型場景

2021-11-04 06:58:32

策略模式面試

2021-06-01 08:25:06

Node.jsJavaScript運行
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美在线视频网 | 一级毛片视频 | www.国产精品| 夜夜爽99久久国产综合精品女不卡 | 天天爽夜夜骑 | 中文字幕在线看人 | 亚洲国产成人精品女人久久久 | 欧美精品三区 | 亚洲高清av在线 | 日韩不卡三区 | 国产一二三区免费视频 | 国产精品999| 91久久电影 | www.国产一区 | 色婷婷亚洲国产女人的天堂 | 国产美女在线观看 | 欧美一级久久 | 日韩精品一区二区三区视频播放 | 日韩亚洲一区二区 | 国产成人啪免费观看软件 | 国产美女精品视频免费观看 | 日韩一区二区福利视频 | 亚洲一区二区 | 国产精品福利网 | 日韩久久久久久 | 日韩精品在线观看一区二区三区 | 国产日韩一区二区三免费高清 | 亚洲福利在线观看 | 久久另类视频 | 日韩中文字幕第一页 | 久久伊人精品一区二区三区 | 国产精品久久精品 | av男人的天堂av | 日韩视频高清 | 久久久久久久久久久久久久久久久久久久 | 一本色道久久综合亚洲精品高清 | 亚洲视频在线观看一区二区三区 | 日韩美香港a一级毛片免费 国产综合av | 久久久久国 | 欧美精品一区二区三区在线 | 欧美一区二区三区久久精品视 |