自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

面試官:說說常見的排序算法有哪些?區(qū)別?

開發(fā) 前端 算法
排序是程序開發(fā)中非常常見的操作,對一組任意的數(shù)據(jù)元素經(jīng)過排序操作后,就可以把他們變成一組一定規(guī)則排序的有序序列.

[[426795]]

本文轉(zhuǎn)載自微信公眾號「JS每日一題」,作者灰灰  。轉(zhuǎn)載本文請聯(lián)系JS每日一題公眾號。

一、是什么

排序是程序開發(fā)中非常常見的操作,對一組任意的數(shù)據(jù)元素經(jīng)過排序操作后,就可以把他們變成一組一定規(guī)則排序的有序序列

排序算法屬于算法中的一種,而且是覆蓋范圍極小的一種,徹底掌握排序算法對程序開發(fā)是有很大的幫助的

對于排序算法的好壞衡量,主要是從時間復(fù)雜度、空間復(fù)雜度、穩(wěn)定性

時間復(fù)雜度、空間復(fù)雜度前面已經(jīng)講過,這里主要看看穩(wěn)定性的定義

穩(wěn)定性指的是假定在待排序的記錄序列中,存在多個具有相同的關(guān)鍵字的記錄,若經(jīng)過排序,這些記錄的相對次序保持不變

即在原序列中,r[i] = r[j],且 r[i] 在 r[j] 之前,而在排序后的序列中,r[i] 仍在 r[j] 之前,則稱這種排序算法是穩(wěn)定的;否則稱為不穩(wěn)定的

二、有哪些

常見的算法排序算法有:

  • 冒泡排序
  • 選擇排序
  • 插入排序
  • 歸并排序
  • 快速排序

冒泡排序

一種簡單直觀的排序算法。它重復(fù)地走訪過要排序的數(shù)列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來

思路如下:

  • 比較相鄰的元素,如果第一個比第二個大,就交換它們兩個
  • 對每一對相鄰元素作同樣的工作,從開始第一對到結(jié)尾的最后一對,這樣在最后的元素應(yīng)該會是最大的數(shù)
  • 針對所有的元素重復(fù)以上的步驟,除了最后一個
  • 重復(fù)上述步驟,直到?jīng)]有任何一堆數(shù)字需要比較

選擇排序

選擇排序是一種簡單直觀的排序算法,它也是一種交換排序算法

無論什么數(shù)據(jù)進(jìn)去都是 O(n2)的時間復(fù)雜度。所以用到它的時候,數(shù)據(jù)規(guī)模越小越好

唯一的好處是不占用額外的內(nèi)存存儲空間

思路如下:

在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

從剩余未排序元素中繼續(xù)尋找最小(大)元素,然后放到已排序序列的末尾。

重復(fù)第二步,直到所有元素均排序完畢

插入排序

插入排序是一種簡單直觀的排序算法

它的工作原理是通過構(gòu)建有序序列,對于未排序數(shù)據(jù),在已排序序列中從后向前掃描,找到相應(yīng)位置并插入

解決思路如下:

  • 把待排序的數(shù)組分成已排序和未排序兩部分,初始的時候把第一個元素認(rèn)為是已排好序的
  • 從第二個元素開始,在已排好序的子數(shù)組中尋找到該元素合適的位置并插入該位置(如果待插入的元素與有序序列中的某個元素相等,則將待插入元素插入到相等元素的后面。)
  • 重復(fù)上述過程直到最后一個元素被插入有序子數(shù)組中

歸并排序

歸并排序是建立在歸并操作上的一種有效的排序算法

該算法是采用分治法的一個非常典型的應(yīng)用

將已有序的子序列合并,得到完全有序的序列,即先使每個子序列有序,再使子序列段間有序

解決思路如下:

  • 申請空間,使其大小為兩個已經(jīng)排序序列之和,該空間用來存放合并后的序列
  • 設(shè)定兩個指針,最初位置分別為兩個已經(jīng)排序序列的起始位置
  • 比較兩個指針?biāo)赶虻脑兀x擇相對小的元素放入到合并空間,并移動指針到下一位置
  • 重復(fù)步驟3直到某一指針到達(dá)序列尾
  • 將另一序列剩下的所有元素直接復(fù)制到合并序列尾

快速排序

快速排序是對冒泡排序算法的一種改進(jìn),基本思想是通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)比另一部分的所有數(shù)據(jù)要小

再按這種方法對這兩部分?jǐn)?shù)據(jù)分別進(jìn)行快速排序,整個排序過程可以遞歸進(jìn)行,使整個數(shù)據(jù)變成有序序列

解決思路如下:

  • 從數(shù)列中挑出一個元素,稱為"基準(zhǔn)"(pivot)
  • 重新排序數(shù)列,所有比基準(zhǔn)值小的元素擺放在基準(zhǔn)前面,所有比基準(zhǔn)值大的元素擺在基準(zhǔn)后面(相同的數(shù)可以到任何一邊)。在這個分區(qū)結(jié)束之后,該基準(zhǔn)就處于數(shù)列的中間位置。這個稱為分區(qū)(partition)操作
  • 遞歸地(recursively)把小于基準(zhǔn)值元素的子數(shù)列和大于基準(zhǔn)值元素的子數(shù)列排序

三、區(qū)別

除了上述的排序算法之外,還存在其他的排序算法,例如希爾排序、堆排序等等......

區(qū)別如下圖所示:

參考文獻(xiàn)

 

  • https://www.runoob.com/w3cnote/bubble-sort.html
  • http://www.x-lab.info/post/sort-algorithm/
  • https://zhuanlan.zhihu.com/p/42586566

 

責(zé)任編輯:武曉燕 來源: JS每日一題
相關(guān)推薦

2021-05-27 05:37:10

HTTP請求頭瀏覽器

2024-04-19 00:00:00

計數(shù)器算法限流算法

2021-09-26 10:57:16

集合操作場景

2021-08-11 08:53:23

Git命令面試

2023-02-20 08:08:48

限流算法計數(shù)器算法令牌桶算法

2021-10-29 09:40:21

設(shè)計模式軟件

2021-08-02 08:34:20

React性能優(yōu)化

2024-02-21 07:40:17

JVM內(nèi)存虛擬機(jī)

2021-06-02 09:42:29

Node. js全局對象

2024-07-26 08:10:10

2021-05-10 08:01:12

BeanFactoryFactoryBean容器

2021-10-21 07:18:02

微信程序方式

2021-07-01 07:51:45

React事件綁定

2021-09-27 06:50:04

非線性數(shù)據(jù)

2025-04-01 00:00:00

項(xiàng)目CRUD單例模式

2021-06-03 08:14:01

NodeProcessJavaScript

2024-06-05 08:09:56

2022-03-21 07:35:34

處理方式跨域

2024-07-26 08:47:07

2021-09-09 07:21:26

TypeScript 高級類型
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號