1. 程式人生 > >常用的排序演算法和時間複雜度

常用的排序演算法和時間複雜度

1. 資料結構部分

資料結構中常用的操作的效率表

通用資料結構

查詢 

插入 

 刪除

遍歷 

陣列

O(N)

O(1)

O(N)

有序陣列

O(logN)

O(N)

O(N)

O(N)

連結串列

O(N)

O(1)

O(N)

有序連結串列

O(N)

O(N)

O(N)

O(N)

二叉樹

O(logN)

O(logN)

O(logN)

O(N)

二叉樹(最壞)

O(N)

O(N)

O(N)

O(N)

紅黑樹

O(logN)

O(logN)

O(logN)

O(N)

O(logN)

O(logN)

O(logN)

O(N)

雜湊表

O(1)

O(1)

O(1)

專用資料結構

O(1)

O(1)

佇列

O(1)

O(1)

優先順序佇列

O(N)

O(1)

O(logN)

O(logN)


2. 排序演算法

常見的排序演算法比較表

排序

平均情況

最好情況

最壞情況

穩定與否

空間複雜度

氣泡排序

O(N2)

O(N)

O(N2)

穩定

1

選擇排序

O(N2)

O(N2)

O(N2)

不穩定

1

插入排序

O(N2)

O(N)

O(N2)

穩定

1

希爾排序

O(NlogN)

(依賴於增量序列)

不穩定

1

快速排序

O(NlogN)

O(NlogN)

O(N2)

不穩定

O(logN)

歸併排序

O(NlogN)

O(NlogN)

O(NlogN)

穩定

O(N)

二叉樹排序

O(NlogN)

O(NlogN)

O(N2)

穩定

O(N)

堆排序

O(NlogN)

O(NlogN)

O(NlogN)

不穩定

1

拓撲排序

O(N+E)

O(N)

首先先給出我們常用的演算法的時間複雜度,後面會具體講解每一個演算法,以及在不同的場合下哪種時間複雜度很高效

相關推薦

常用排序演算法時間複雜空間複雜及特點

一、常用排序演算法的時間複雜度和空間複雜度表格 二、特點 1.歸併排序: (1)n大時好,歸併比較佔用記憶體,記憶體隨n的增大而增大,但卻是效率高且穩定的排序演算法。 (2)歸併排序每次遞迴都要用到一個輔助表,長度與待排序的表長度相同,雖然遞迴次數是O(log2n),但每次

常用排序演算法時間複雜

1. 資料結構部分資料結構中常用的操作的效率表通用資料結構查詢 插入  刪除遍歷 陣列O(N)O(1)O(N)—有序陣列O(logN)O(N)O(N)O(N)連結串列O(N)O(1)O(N)—有序連結串

常用排序演算法時間複雜空間複雜

總結: (1)當排序記錄個數n較大,關鍵碼分佈較隨機,且對穩定性不作要求時,採用快速排序為宜。 (2)當待排序記錄個數n較大,記憶體空間允許,且要求穩定排序時,採用歸併排序。 (3)當待排序記錄個數n較大,關鍵碼分佈可能出現正序或逆序的情況,且對穩定性

常用排序演算法以及時間複雜

希爾排序 快速排序 二叉樹排序 氣泡排序 選擇排序 堆排序 #include <iostream.h> #include <conio.h> #include <stdlib.h> #include <time.h>

常用排序演算法時間複雜空間複雜

排序法 最差時間分析 平均時間複雜度 穩定度 空間複雜度 氣泡排序 O(n2) O(n2) 穩定 O(1) 快速排序 O(n2) O(n*log2n) 不穩定 O(log2n)~O(n) 選擇排序 O(n2) O(n2) 穩定 O(1) 二叉樹排序 O(n2) O(n*log2

常用幾種排序演算法時間複雜空間複雜

 常用的排序演算法的時間複雜度和空間複雜度 排序法  最差時間分析 平均時間複雜度  穩定度  空間複雜度  氣泡排序 O(n2) O(n2)  穩定  O(

氣泡排序演算法時間複雜穩定性

氣泡排序 氣泡排序一般是我們學習排序演算法時第一個接觸的演算法,下面來介紹一下氣泡排序。 演算法原理 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。 對每一對相鄰元素做同樣的工作,從開始第一對到結尾的最後一對。在這一步,最後的元素應該會是最大

排序演算法時間複雜空間複雜-----總結

演算法的時間複雜度是指:演算法執行過程中所需要的基本運算次數。 常見的演算法時間複雜度由小到大依次為:Ο(1)<Ο(log2n)<Ο(n)<Ο(nlog2n)<Ο(n^2)<Ο(n^3)<…<Ο(2^n)<Ο(n!)。其中O(1)表示基本語句的執行次數是一個常數,一般來說,

插入排序演算法時間複雜穩定性

插入排序 演算法原理 將資料分為有序部分和無序部分。 在無序部分選擇一個元素,按照順序插入到有序部分,使之有序。 直到無序部分都插入到有序部分結束。 演算法分析 排序的思想就是維護一個有序的部分,將無序部分的資料按照順序插入到有序部分。 通

八種排序演算法時間複雜複雜

https://www.cnblogs.com/dll-ft/p/5861210.html 轉載 1、穩定性 歸併排序、氣泡排序、插入排序。基數排序是穩定的 選擇排序、快速排序、希爾排序、堆排序是不穩定的   2、時間複雜度 最基礎的四個演算法:冒泡、選擇

初學者學演演算法|談什麼是演演算法時間複雜

進階篇:深入時間複雜度的實際情況到目前為止,我們認識了何謂演演算法,以及評斷演演算法設計好壞的工具:時間複雜度。接下來的部分,屬於比較進階的練功,對剛接觸的新手可能會覺得有點難度或沒辦法完全理解。小小的建議是,如果你看第一次沒辦法完全體會,可以留到對程式設計更熟悉後再回頭複習。而當然,如果有任何問題也都歡迎討

各種排序演算法時間複雜

選擇排序、快速排序、希爾排序、堆排序不是穩定的排序演算法, 氣泡排序、插入排序、歸併排序和基數排序是穩定的排序演算法。 排序演算法不穩定的含義是:在排序之前,有兩個數相等. 但是在排序結束之後,它們兩個有可能改變順序. 比如說:  在一個待排序佇列中,A和B相等,且A排在

實現排序演算法時間複雜為O(n)

我們常用的排序氣泡排序 O(n^2); 快速排序O(nlogn);堆排序O(nlogn);選擇排序O(n^2); 我們常用的排序都不符合時間複雜度的要求; 經常聽說一個說法  用空間代替時間 現在要排序的陣列為陣列 a;例如a數組裡面有  1,1,2,2,3,3,2,2,5

【整理】常見排序演算法及其時間複雜總結

原文出處: 本篇主要整理了氣泡排序,直接插入排序,直接選擇排序,希爾排序,歸併排序,快速排序,堆排序七種常見演算法,是從上面三篇博文中摘抄整理的,非原創。 一、氣泡排序 主要思路是: 通過交換相鄰的兩個數變成小數在前大數在後,這樣每次遍歷後,最大的數就“沉”到最後面了。重複N次即可以使陣列有序。 氣泡

各個排序演算法時間複雜、空間複雜、穩定性

排序演算法分類 排序演算法比較表格填空 排序演算法比較表格 1 歸併排序可以通過手搖演算法將空間複雜度降到O(1),但是時間複雜度會提高。注: 2 基數排序時間複雜度為O(N*M),其中N為資料個數,M為資料位數。 輔助記憶 時間複雜度記憶-

關於基於比較的排序演算法時間複雜“最壞”下界o(nlogn)與“最優”下界o(n)說明

前言            之前在查詢基於比較排序演算法的時間複雜度時發現,好多博主對“最壞”下界與“最優”下界沒有分清,而是預設的把時間複雜度o(nlogn)當成了“最優”下界。這樣很是誤導大家,影響很不好。所以特此寫一篇說明文章,能讓大家理解得更透徹。 下界    

八大排序演算法時間複雜

排序演算法的穩定性: 假定在待排序的記錄序列中,存在多個具有相同的關鍵字的記錄,若經過排序,這些記錄的相對次序保持不變,即在原序列中,ri=rj,且ri在rj之前,而在排序後的序列中,ri仍

快速排序演算法時間複雜分析(原地in-place分割槽版本)

快速排序演算法一般來說是採用遞迴來實現,其最關鍵的函式是partition分割函式,其功能是將陣列劃分為兩部分,一部分小於選定的pivot,另一部分大於選定的pivot。我們將重點放在該函式上面。 partition函式總體思路是自從一邊查詢,找到小於pivot的元素,則將

經典排序演算法時間複雜詳解)

動畫網站 主要術語解釋: 穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面; 不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面; 內排序:所有排序操作都在記憶體中完成; 外排序:由於資料太大,因此把資料放在磁碟中,

排序演算法時間複雜分析

堆其實通常是通過一維陣列來實現的,在陣列起始下標為0的情況下,父節點i的左右子節點分別為2*i+1和2*i+2,子節點i的父節點為(i-1)/2。對堆的操作主要有建堆、調整堆、堆排序、插入和刪除堆中元素。其中調整堆是核心。下面將重點介紹兩種調整堆的方法。 向下調整堆(shi