1. 程式人生 > >十大排序演算法及其實現(C++ & Python)

十大排序演算法及其實現(C++ & Python)

經典的幾大排序演算法,網上各種版本程式碼質量層次不齊。在此想自己做個總結,一方面希望通過這次總結加深自己對幾種排序演算法的認識和記憶,另一方面也希望能寫下來與大家分享。

每個演算法力求給出普通解法和最優解法,當前部分排序演算法還沒有給出最優解,待後續的更新和補充。

排序演算法說明

1. 演算法優劣說明

穩定:如果a原本在b前面,而a=b,排序之後a仍然在b的前面;
不穩定:如果a原本在b的前面,而a=b,排序之後a可能會出現在b的後面;

時間複雜度: 一個演算法執行所耗費的時間;
空間複雜度: 執行完一個程式所需記憶體的大小。

2. 排序演算法總結

排序演算法 平均時間複雜度 最好情況 最壞情況 空間複雜度 穩定性
氣泡排序 O(n2) O(n) O(n2) O(1) 穩定
插入排序 O(n2) O(n) O(n2) O(1) 穩定
shell排序 O(n1.3) O(n) O(n2) O(1) 不穩定
選擇排序 O(n2) O(n2) O(n2) O(1) 不穩定
快速排序 O(nlogn) O(nlogn) O(n2) O(logn) 不穩定
歸併排序 O(nlogn) O(nlogn) O(nlogn) O(1) 穩定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不穩定
計數排序 O(n+k) O(n+k) O(n+k
)
O(k) 穩定
桶排序 O(n+k) O(n+k) O(n2) O(n+k) 穩定
基數排序 O(n×k) O(n×k) O(n×k) O(n+k) 穩定
  • n – 資料規模
  • k –“桶”的個數

一、氣泡排序(Bubble Sort)

平均時間複雜度:

排序演算法程式碼總覽(C++)

注: 演算法穩定性 定義:待排序序列中的相同關鍵字記錄經過排序後相對次序保持不變。比如Xm=xn,原本Xm在Xn之前,排序後依然Xm在Xn之前。 條件:演算法的穩定性由具體演算法決定,且在一定條件下演算法穩定性也會發生轉變。 穩定性意義:只有在排序一

輕鬆搞定排序演算法(c++版)

本文章,是為了讓讀者會用十大排序演算法。如果您對我的部落格感興趣,歡迎關注我☺。如對本文章有任何的疑問或者您有更好理解,歡迎在評論區寫下您的見解。 0、簡介 本系列文章,是為了讓讀者會用十大經典排序演算法,如果您對我的部落格感興趣,歡迎關注我☺

一篇夯實一個知識點系列--python實現排序演算法

#### 寫在前面 > 排序是查詢是演算法中最重要的兩個概念,我們大多數情況下都在進行查詢和排序。科學家們窮盡努力,想使得排序和查詢能夠更加快速。本篇文章用Python實現十大排序演算法。 #### 乾貨兒 > 排序演算法從不同維度可以分為好多類別,從其排序思想(排序思想一般決定了其

這是我見過最詳細的排序演算法介紹了,沒有之一排序演算法詳解

> **作者:** C you again,從事軟體開發 努力在IT搬磚路上的技術小白 > **公眾號:** 【**[C you again](https://cyouagain.cn/)**】,分享計算機類畢業設計原始碼、IT技術文章、遊戲原始碼、網頁模板、程式人生等等。公眾號回覆 【**粉絲

快速排序、程式碼實現python3版及其時間空間複雜度分析

快速排序是對氣泡排序的一種改進。基本思想是:通過一躺排序將要排序的資料分割成獨立的兩部分,其中一部分的所有資料都比另外一部分的所有資料都要小,然後再按次方法對這兩部分資料分別進行快速排序,整個排序過程可以遞迴進行,以此達到整個資料變成有序序列。最壞情況的時間複雜度為O(n2),最好情況時間複雜度

演算法4-6:KMP字串模式匹配演算法實現 c語言

[提交] [統計] [提問] 題目描述 KMP演算法是字串模式匹配演算法中較為高效的演算法之一,其在某次子串匹配母串失敗時並未回溯母串的指標而是將子串的指標移動到相應的位置。嚴蔚敏老師的書中詳細描述了KMP演算法,同時前面的例子中也描述了子串移動位置的陣列實現的演算法。前面你已經實現

經典排序演算法實現選擇,插入,shell,堆,快速,歸併排序

1.選擇排序 //選擇排序 void selectSort(int * arr, int n) { for (int i = 0; i < n - 1; i++) { int min = arr[i]; int minPos = i; for (int j = i

前端排序演算法

一、插入排序 <script> /* 原理:通過構建有序序列,對於未排序資料,在已排序序列中從後向前掃描,找到相應位置並插入。插入排序在實現上,通常採用inplace排序(即只需用到O(1)的額外空間排序),因而在從後向前掃描過程中,需要反覆把已排序元素逐步向後挪位,為最新元

排序演算法詳細

常見的排序演算法有:插入排序、選擇排序、氣泡排序、快速排序、堆排序、歸併排序、希爾排序、二叉樹排序、計數排序、桶排序、基數排序。 分類:十大排序演算法可以分為兩類: 非線性時間比較類排序:通過比較來決定元素間的相對次序,由於其時間複雜度不能突破O(nlogn