從 最好情況、最壞情況、平均情況時間複雜度,演算法的記憶體消耗和穩定性方面考慮。
一、非遞迴排序
1、氣泡排序
空間複雜度為 o(1),是乙個原地排序演算法。
只有交換才可以改變兩個元素的前後順序。為了保證氣泡排序演算法的穩定性,兩個元素相等的時候不做交換,所以是穩定的演算法
時間複雜度:最好情況下是o(n),因為所有資料都已有效,只冒泡一次。最壞情況時間複雜度為 o(n2)
2、插入排序
空間複雜度為 o(1),是乙個原地排序演算法。
對於值相同的元素,我們可以選擇將後面出現的元素,插入到前面出顯得元素的後面,所以是穩定的演算法。
時間複雜度:最好情況下是o(n),因為所有資料都已有效,從頭到尾比較n次。最壞情況時間複雜度為 o(n2),相當於搬移資料的次數。
3、選擇排序
每次會從未排序區間中找到最小的元素,將其放到已排序區間的末尾。頻繁的資料搬移代價非常高
空間複雜度為 o(1),是乙個原地排序演算法。因為每次都會用未排區間最小的元素和最前面的乙個位置交換,所以會破壞穩定性。
最好最壞時間複雜度都是 o(n2)
二、遞迴排序
1、歸併排序
2、快速排序
快速排序的執行時間依賴於是否劃分平衡。如果劃分是不平衡的,效能就接近於插入排序了。
之後會慢慢更新
排序演算法總結
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 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來...