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

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

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

[[426795]]

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

一、是什么

排序是程序開發中非常常見的操作,對一組任意的數據元素經過排序操作后,就可以把他們變成一組一定規則排序的有序序列

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

對于排序算法的好壞衡量,主要是從時間復雜度、空間復雜度、穩定性

時間復雜度、空間復雜度前面已經講過,這里主要看看穩定性的定義

穩定性指的是假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變

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

二、有哪些

常見的算法排序算法有:

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

冒泡排序

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

思路如下:

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

選擇排序

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

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

唯一的好處是不占用額外的內存存儲空間

思路如下:

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

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

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

插入排序

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

它的工作原理是通過構建有序序列,對于未排序數據,在已排序序列中從后向前掃描,找到相應位置并插入

解決思路如下:

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

歸并排序

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

該算法是采用分治法的一個非常典型的應用

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

解決思路如下:

  • 申請空間,使其大小為兩個已經排序序列之和,該空間用來存放合并后的序列
  • 設定兩個指針,最初位置分別為兩個已經排序序列的起始位置
  • 比較兩個指針所指向的元素,選擇相對小的元素放入到合并空間,并移動指針到下一位置
  • 重復步驟3直到某一指針到達序列尾
  • 將另一序列剩下的所有元素直接復制到合并序列尾

快速排序

快速排序是對冒泡排序算法的一種改進,基本思想是通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據比另一部分的所有數據要小

再按這種方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,使整個數據變成有序序列

解決思路如下:

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

三、區別

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

區別如下圖所示:

參考文獻

 

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

 

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

2021-05-27 05:37:10

HTTP請求頭瀏覽器

2024-04-19 00:00:00

計數器算法限流算法

2021-09-26 10:57:16

集合操作場景

2021-08-11 08:53:23

Git命令面試

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2021-10-29 09:40:21

設計模式軟件

2021-08-02 08:34:20

React性能優化

2024-02-21 07:40:17

JVM內存虛擬機

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

微信程序方式

2025-04-01 00:00:00

項目CRUD單例模式

2021-09-27 06:50:04

非線性數據

2021-07-01 07:51:45

React事件綁定

2024-06-05 08:09:56

2021-06-03 08:14:01

NodeProcessJavaScript

2024-07-26 08:47:07

2021-09-09 07:21:26

TypeScript 高級類型

2024-08-22 10:39:50

@Async注解代理
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 日韩一区二区视频 | 国产目拍亚洲精品99久久精品 | 成人午夜高清 | 人妖videosex高潮另类 | 五月婷婷中文 | 中文字幕国产一区 | 日韩在线视频免费观看 | 精品视频免费 | av资源在线看 | 成人在线视频观看 | 久久久久久久综合 | 久久免费国产 | 在线看av的网址 | 国产1区2区| 欧美mv日韩mv国产网站91进入 | 国产h视频 | 国产乱码一二三区精品 | 久久精品国产精品青草 | 国产乱肥老妇国产一区二 | 中文字幕日韩一区 | 久久久久久国产 | 丝袜 亚洲 另类 欧美 综合 | 91精品国产92 | 国产成人精品一区二区三区网站观看 | 免费黄色的网站 | 久久久xx| 国产欧美日韩久久久 | 亚洲国产精品一区二区久久 | 欧州一区二区三区 | 日韩成人精品在线 | 久久伊| 亚洲免费视频播放 | 亚卅毛片 | 97超在线视频 | 亚洲一区二区av | 高清欧美性猛交 | 国产第一页在线播放 | 美女网站视频免费黄 | 国产农村一级片 | 国产欧美精品区一区二区三区 | 国产欧美一区二区在线观看 |