排序演算法:
1)分類:
1)插入排序(直接插入排序、希爾排序)
2)交換排序(氣泡排序、快速排序)
3)選擇排序(直接選擇排序、堆排序)
4)歸併排序
5)分配排序(箱排序、基數排序)
所需輔助空間最多:歸併排序
所需輔助空間最少:堆排序
平均速度最快:快速排序
不穩定:快速排序,希爾排序,堆排序。
1)選擇排序演算法的時候
1.資料的規模 ; 2.資料的型別 ; 3.資料已有的順序
一般來說,當資料規模較小時,應選擇直接插入排序或氣泡排序。任何排序演算法在資料量小時基本體現不出來差距。 考慮資料的型別,比如如果全部是正整數,那麼考慮使用桶排序為最優。 考慮資料已有順序,快排是一種不穩定的排序(當然可以改進),對於大部分排好的資料,快排會浪費大量不必要的步驟。資料量極小,而起已經基本排好序,冒泡 是最佳選擇。我們說快排好,是指大量隨機資料下,快排效果最理想。而不是所有情況。
3)總結:
——按平均的時間效能來分:
1)時間複雜度為o(nlogn)的方法有:快速排序、堆排序和歸併排序,其中以快速排序為最好;
2)時間複雜度為o(n2)的有:直接插入排序、起泡排序和簡單選擇排序,其中以直接插入為最好,特別是對那些對關鍵字近似有序的記錄序列尤為如此;
3)時間複雜度為o(n)的排序方法只有,基數排序。
當待排記錄序列按關鍵字順序有序時,直接插入排序和起泡排序能達到o(n)的時間複雜度;而對於快速排序而言,這是最不好的情況,此時的時間性 能蛻化為o(n2),因此是應該盡量避免的情況。簡單選擇排序、堆排序和歸併排序的時間效能不隨記錄序列中關鍵字的分布而改變。
——按平均的空間效能來分(指的是排序過程中所需的輔助空間大小):
1) 所有的簡單排序方法(包括:直接插入、起泡和簡單選擇)和堆排序的空間複雜度為o(1);
2) 快速排序為o(logn ),為棧所需的輔助空間;
3) 歸併排序所需輔助空間最多,其空間複雜度為o(n );
4)鏈式基數排序需附設佇列首尾指標,則空間複雜度為o(rd )。
——排序方法的穩定性能:
1) 穩定的排序方法指的是,對於兩個關鍵字相等的記錄,它們在序列中的相對位置,在排序之前和經過排序之後,沒有改變。
2) 當對多關鍵字的記錄序列進行lsd方法排序時,必須採用穩定的排序方法。
3) 對於不穩定的排序方法,只要能舉出乙個例項說明即可。
4) 快速排序,希爾排序和堆排序是不穩定的排序方法。
各種排序演算法總結
注 以下所講排序,以公升序排序為例!選擇排序 作者思路 在一組數中,選擇第乙個數標記為最小值,在剩下的數中找比它小的數,若找到則交換兩數,標記新的 最小值 然後繼續往下找,這樣一趟下來就可以找到一組數中第二小的值,第二次以第二個數作為最小值,如此迴圈下去。這是最簡單 最基礎的一種排序演算法。例子 1...
各種排序演算法總結
1 插入排序 void insertsort int a,int n a j 1 key 插入排序是穩定的排序,平均和最壞時間複雜度是o n 2 最好的時間複雜度是o n 對應於全部排好序的情況。2 氣泡排序 void bubblesort int a,intn 氣泡排序是穩定的排序,平均和最壞時間...
各種排序演算法總結
created by vencent on 2008.8.29 1.插入排序 1.1 一般插入排序 insertsort int array,int length 1.2 折半插入排序 bininsertsort int array,int length 1.3 希爾排序 shellsort int...