一些排序複雜度和思想

2021-08-10 22:31:52 字數 965 閱讀 1522

名稱

複雜度說明

備註氣泡排序

bubble sort

o(n*n)

將待排序的元素看作是豎著排列的「氣泡」,較小的元素比較輕,從而要往上浮

插入排序

insertion sort

o(n*n)

逐一取出元素,在已經排序的元素序列中從後向前掃瞄,放到適當的位置

起初,已經排序的元素序列為空

選擇排序

selection sort

o(n*n)

首先在未排序序列中找到最小元素,存放到排序序列的起始位置,然後,再從剩餘未排序元素中繼續尋找最小元素,然後放到排序序列末尾。以此遞迴。

快速排序

quick sort

o(n *log2(n))

先選擇中間值,然後把比它小的放在左邊,大的放在右邊(具體的實現是從兩邊找,找到一對後交換

)。然後對兩邊分別使用這個過程(遞迴)。

堆排序heap sort

o(n *log2(n))

利用堆(heaps)這種資料結構來構造的一種排序演算法。堆是乙個近似完全二叉樹結構,並同時滿足堆屬性:即子節點的鍵值或索引總是小於(或者大於)它的父節點。

近似完全二叉樹

希爾排序

shell sort

o(n1+

£)0<£<1

選擇乙個步長(step) ,然後按間隔為步長的單元進行排序.遞迴,步長逐漸變小,直至為1.

箱排序bin sort

o(n)

設定若干個箱子,把關鍵字等於 k 的記錄全都裝入到第 k 個箱子裡 ( 分配 ) ,然後按序號依次將各非空的箱子首尾連線起來 ( 收集 ) 。

分配排序的一種:通過 " 分配 " 和 " 收集 " 過程來實現排序。

桶排序bucket sort

o(n)

桶排序的思想是把 [0 , 1) 劃分為 n 個大小相同的子區間,每一子區間是乙個桶。

關於時間複雜度和空間複雜度的一些想法

在學c語言程式設計的時候,相信很多朋友都不會涉及時間複雜度和空間複雜度的概念,我在學譚浩強的c的時候,也不曾有過關於複雜度的概念,後來學習了資料結構,其中裡面的幾種結構,才真正對複雜度有了認識,原因是c語言程式設計,即使是acm程式題,也未必有嚴格的時間和空間限制,乙個小小的程式,少則30行,多則6...

排序演算法 時間複雜度和空間複雜度

常數階o 1 無論 執行了多少行,只要沒有迴圈複雜結構,那麼這個的時間複雜度就是o 1 o 1 時間複雜度 沒有迴圈結構的順序執行,無論執行多少行,時間複雜度均為o 1 public static voido1 對數階o log2n o log2n 時間複雜度 此處 i 以二倍的速度增長,也就是說到...

時間複雜度和空間複雜度(一)

如何度量演算法的效率?效率一般指演算法的執行時間。那麼如何度量演算法的執行時間?事後統計方法 可以把演算法跑若干次,用計時器計時 通過設計好的測試程式和資料,利用計算機計時器對不同演算法編制的程式的執行時間進行比較,從而確定演算法效率高低。缺陷 必須依據演算法,事先編制好測試程式,大量耗費時間精力。...