1. 程式人生 > >各種排序演算法的優缺點

各種排序演算法的優缺點



1.插入排序

基本思想:

將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止。

優點:穩定,快

缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特別是當資料總量龐大的時候

2.希爾排序

基本思想:

先將整個待排序的記錄序列分割成為若干子序列分別進行直接插入排序,待整個序列中的記錄基本有序時,再對全體記錄進行依次直接插入排序。

優點:快,資料移動少

缺點:不穩定,d的取值是多少,應取多少個不同的值,都無法確切知道,只能憑經驗來取

3.簡單選擇排序

基本思想:

將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1

的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序為止。

優點:資料移動次數已知為(n-1)次

缺點:比較次數多

4.氣泡排序

基本思想:

在要排序的一組數中,對當前還未排好序的範圍內的全部數,自上而下對相鄰的兩個數依次進行比較和調整,讓較大的數往下沉,較小的往上冒。即:每當兩相鄰的數比較後發現它們的排序與排序要求相反時,就將它們互換。

優點:穩定

缺點:慢,每次只能移動相鄰兩個資料

5.快速排序

基本思想:

1)選擇一個基準元素,通常選擇第一個元素或者最後一個元素,

2)通過一趟排序講待排序的記錄分割成獨立的兩部分,其中一部分記錄的元素值均比基準元素值小。另一部分記錄的元素值比基準值大。

3)此時基準元素在其排好序後的正確位置

4)然後分別對這兩部分記錄用同樣的方法繼續進行排序,直到整個序列有序。

優點:極快,資料移動少.

缺點:不穩定

6.簡單選擇排序

歸併排序是一種非就地排序,將需要與待排序序列一樣多的輔助空間。在使用它對兩個己有序的序列歸併,將有無比的優勢。其時間複雜度無論是在最好情況下還是在最壞情況下均是O(nlog2n)。對資料的有序性不敏感。若資料節點資料量大,那將不適合。但可改造成索引操作,效果將非常出色。

7.簡單選擇排序

堆排序:由於它在直接選擇排序的基礎上利用了比較結果形成。效率提高很大。它完成排序的總比較次數為O(nlog2n)。它是對資料的有序性不敏感的一種演算法。但堆排序將需要做兩個步驟:-是建堆,二是排序(調整堆)。所以一般在小規模的序列中不合適,但對於較大的序列,將表現出優越的效能。

相關推薦

各種排序演算法優缺點

 1.插入排序 基本思想: 將一個記錄插入到已排序好的有序表中,從而得到一個新,記錄數增1的有序表。即:先將序列的第1個記錄看成是一個有序的子序列,然後從第2個記錄逐個進行插入,直至整個序列有序

各種排序演算法詳解C++實現

1.氣泡排序 時間複雜度 O ( n

各種排序演算法,一步步更新(一),桶排序,氣泡排序,選擇排序,快速排序

部分方法來自我關注的博主  J_小浩子  謝謝 1 桶排序  bucketsort 1 桶排序 #include <stdio.h>//桶排序基本說明 int main(){     int data1[11]={0},tem

【初賽】各種排序演算法總結

一、演算法評價 排序方法 平均時間 最好時間 最壞時間 氣泡排序(穩定) O(n^2) O(n) O(n^2) 選擇排序(

用java實現各種排序演算法

package Com.Sort; /** * 各種高階排序方法的實現 * * @author Jane */ public class AdvanceSort { // 列印陣列 public static <T extends Comparable<?

python 實現各種排序演算法

總結了一下常見集中排序的演算法。   歸併排序 歸併排序也稱合併排序,是分治法的典型應用。分治思想是將每個問題分解成個個小問題,將每個小問題解決,然後合併。 具體的歸併排序就是,將一組無序數按n/2遞迴分解成只有一個元素的子項,一個元素就是已經排好序的了。然後將這些有

各種排序演算法總結和比較

       排序演算法可以說是一項基本功,解決實際問題中經常遇到,針對實際資料的特點選擇合適的排序演算法可以使程式獲得更高的效率,有時候排序的穩定性還是實際問題中必須考慮的,這篇部落格對常見的排序演算法進行整理,包括:插入排序、選擇排序、氣泡排序、快速排序、堆排序、歸併

各種排序演算法

目錄 二分查詢 氣泡排序 選擇排序 插入排序 希爾排序 歸併排序 快速排序 堆排序 計數排序 桶排序 基數排序 二分查詢 //不使用遞迴實現:while迴圈,時間O(log2 N),空間O(1) public static int com

各種排序演算法的時間複雜度

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

各種排序演算法的總結

1.時間複雜度 排序方式 時間複雜度 空間複雜度 穩定性 複雜度 平均情況 最好情況 最壞情況   交換排序 氣泡排序

各種排序演算法大合集

各種演算法的比較: 快速排序: 希爾(Shell)排序: 要點 希爾(Shell)排序又稱為縮小增量排序,它是一種插入排序。它是直接插入排序演算法的一種威力加強版。 希爾排序的基本思想是: 把記錄按步長 gap 分組,對每組記錄採用直接插入排序方法進行排序。

各種排序演算法的場景以及c++實現(插入排序,希爾排序,氣泡排序,快速排序,選擇排序,歸併排序

對現有工作並不是很滿意,所以決定找下一個坑。由工作中遇到排序場景並不多,大都是用氣泡排序,太low,面試又經常問到一些排序演算法方面的東西。剛好讓小學妹郵的資料結構也到了。就把各種排序演算法重新總結一下,以作留存。 排序分為內部排序和外部排序,內部排序是在記憶體中排序。外

JAVA之各種排序演算法(冒泡、選擇、快排、二分法詳細過程)

掌握演算法是作為程式設計師的基本必備素質,而排序也是各種演算法的基礎,雖說java幫我們封裝好了各種資料型別的排序方法,可是我們還是要知道他的原理,下面我就說幾種常用的演算法及原理; 氣泡排序: 原理:相鄰元素兩兩比較,大的往後放,每一次完畢,最大值出現在了最大索引處; 下面我們

各種排序演算法的總結和比較

1 快速排序(QuickSort)快速排序是一個就地排序,分而治之,大規模遞迴的演算法。從本質上來說,它是歸併排序的就地版本。快速排序可以由下面四步組成。(1) 如果不多於1個數據,直接返回。(2) 一般選擇序列最左邊的值作為支點資料。(3) 將序列分成2部分,一部分都大於支

各種排序演算法複雜度比較

寫在前面 筆試題目當中會出現各種排序演算法的比較,分為最好,最壞,平均情況的複雜度比較,在這裡總結一下。 主要內容 最好情況 一般會這麼問:在各自最優條件下以下演算法複雜度最低的是 看清題目的要求是問在最優的條件下,所以插入排序

各種排序演算法比較(1):穩定性

前面有講到了9種排序演算法:      (3和4屬於插入排序,有時把改進後的直接插入排序叫做二分插入) 5.氣泡排序         6.快速排序     (5和6屬於交換排序.交換排序顧名思義是不停的交換資料位置.但實際上選擇排序也在不停的交換元素,但次數較少,只有

各種排序演算法及其複雜度

穩定的   氣泡排序(bubble sort) — O(n^2)   雞尾酒排序(Cocktail sort,雙向的氣泡排序) — O(n^2)   插入排序(insertion sort)— O(n^2)   桶排序(bucket sort)— O(n); 需要 O

各種排序演算法效能比較。

原帖 http://www.cnblogs.com/wangjiahong/p/3570465.html?utm_source=tuicool 下面是我直接做成的原始碼,直接可以執行。 大家可以根據需要測試 using System; using System.Col

java實現各種排序演算法(包括氣泡排序,選擇排序,插入排序,快速排序(簡潔版))及效能測試

1、氣泡排序是排序裡面最簡單的了,但效能也最差,數量小的時候還可以,數量一多,是非常慢的。      它的時間複雜度是O(n*n),空間複雜度是O(1)      程式碼如下,很好理解。 public static void bubbleSort(int[] arr)

各種排序演算法比較

1.穩定性比較 插入排序、氣泡排序、二叉樹排序、二路歸併排序及其他線形排序是穩定的 選擇排序、希爾排序、快速排序、堆排序是不穩定的 2.時間複雜性比較    平均情況  最好情況 最壞情況 歸併排序 O(nlogn)  O(nlogn) O(nlogn) 基數排序 O(