先說結論:
隨機情況時:快速排序=堆排序=歸併排序>希爾排序》插入排序》選擇排序》氣泡排序
部分有序時:插入排序=希爾排序》快速排序>堆排序=歸併排序》選擇排序=氣泡排序
全部逆序時:快速排序=堆排序=歸併排序>希爾排序》選擇排序》插入排序》氣泡排序
1、選擇排序
每次從未排序元素中尋找最(小)大元素進行交換,放在已排好序列的最後。(實際上將從未排序中找到的最大(小)值與未排序第乙個值交換)
特點:比較次數多,交換次數少,不穩定。
2、插入排序
每次將新元素插入到已排序元素序列中,將其放在相對正確的位置。(遍歷已排序列,比較未排序列值並將其插入已排序列中)
特點:適用於部分有序及元素個數少,穩定。
3、氣泡排序
每次交換相鄰位置的元素,迴圈一輪使最大(小)的元素處於最末的位置。下一輪,次大(小)的元素處於倒數第二個位置。
特點:交換次數多,慢,穩定。
4、希爾排序
將無序序列分組,對每組序列進行插入排序,在對分好的組進行插入排序。
特點:快,資料移動少,分組大小由經驗決定,不穩定。
5、快速排序(已知最快的排序方法)
每次取乙個值作為基準,將小於該值的元素移動到前面,大於該值的移動到後面(該值處於正確的位置),再對前後兩組分別進行快速排序。
特點:極快,資料移動少,不穩定。
6、歸併排序
將乙個無序的序列分成兩個(或兩個以上)有序的表,再整體合併成乙個有序的表,採用分治法。
特點:快,穩定。
7、桶排序
將待排序的元素全部直接對映到足夠大的臨時數中
特點:效率o(1),快,元素必須為整數,空間消耗大。
8、堆排序
堆建好之後堆中第0個資料是堆中最小的資料。取出這個資料再執行下堆的刪除操作。這樣堆中第0個資料又是堆中最小的資料,取出這個資料。
特點:快,不穩定。
9、計數排序
利用陣列的隨機訪問特性,將要排序的數k轉換成陣列的下標k,該陣列中以k為下標的值a[k]代表這個數k的個數。
特點:非常快,空間複雜度比較高。
10、基數排序
先根據序列的個位數的數字來進行分類,將其分到指定的桶中。分類後,我們在從各個桶中,將這些數按照從編號0到編號9的順序依次將所有數取出來。接下來,可以對十位數、百位數也按照這種方法進行排序,最後就能得到排序完成的序列。
特點:快,適用於已知陣列範圍,不需要比較關鍵字的大小,穩定。
排序演算法總結
1 直接插入排序 1 穩定性 穩定 2 適用情況 待排記錄規模較小,或者記錄已經基本有序 2 希爾排序 1 穩定性 不穩定 2 特點 希爾排序的執行時間依賴於增量序列,它的效率比直接插入排序有較大的改進。3 氣泡排序 1 穩定性 穩定 2 特點 當待排記錄基本有序是,氣泡排序是不錯的選擇 但由於氣泡...
排序演算法總結
1 選擇排序 選擇排序的思想是依次從待排序數列中選擇最大 小 的 第二大 小 的等等,然後依次重新排列為有序數列。void selectionsort int a,int n if min i 時間複雜度o n 2 2 歸併排序 void merge int a,int left,int mid,i...
排序演算法總結
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是 o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...