幾種常用排序演算法的比較

2021-09-07 15:29:39 字數 1369 閱讀 5593

菜鳥前路,帶你感受不一樣的程式設計之路!

1.選擇法

演算法要求:(例)用選擇法對10個整數按降序排序。

演算法分析:每趟選出乙個最值和無序序列的第乙個數交換,n個數共選n-1趟。第i趟假設i為最值下標,然後將最值和i+1至最後乙個數比較,找出最值的下標,若最值下標不為初設值,則將最值元素和下標為i的元素交換。

# include main()

/*輸出排序結果*/

printf("the sorted numbers: ");

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

}

演算法特點:相鄰元素兩兩比較,每趟將最值沉底即可確定乙個數在結果的位置,確定元素位置的順序是從後往前,其餘元素可能作相對位置的調整。可以進行公升序或降序排序

3.插入法

演算法要求:(例)用插入排序法對10個整數進行降序排序。

演算法分析:將序列分為有序序列和無序列,依次從無序序列中取出元素值插入到有序序列的合適位置。初始時有序序列中只有第乙個數,其餘n-1個數組成無序序列(即原序列),則n個數需進n-1次插入。在有序序列中尋找插入位置,可以從有序序列的最後乙個數往前找,在未找到插入點之前可以同時向後移動元素,為插入元素準備空間。

# include main()

printf("the sorted numbers: ");

for(i=0;i<10;i++)

printf("%d ",a[i]);

printf("\n");

}

演算法特點:每趟從無序序列中取出第乙個數插入到有序序列的合適位置,元素的最終位置在最後一趟插入後才能確定位置。也可是先用迴圈查詢插入位置(可從前往後或從後往前),再將插入位置之後的元素(有序列中)逐個後移乙個位置,最後完成插入。該演算法的特點是在尋找插入位置的同時完成元素的移動。因為元素的移動必須從後往前,則可將兩個操作結合在一起完成,提高演算法效率。仍可進行公升序或降序排序。

對插入排序的詳解和其進化——「直接插排」的解說我放到了 這篇文章,有興趣可以自行閱讀。

4.希爾排序

這個就很nb了,使用增量實現,需要做的就是不斷的兩兩比較,增量減半,然後重新遍歷,往復進行

private static void shellsort(int arr)

a[j+ d] = temp;}}

if (d== 1)

}}

這個自認為沒有這篇部落格說的明白,沒看明白或者希望詳細了解的請移步 希爾排序–簡單易懂**

希望大家能有所收穫吧。。。

幾種排序演算法比較

資料結構 10 排序十 四 排序 sort thinking in algorithm 12.詳解十一種排序演算法 排序法平均時間 最差情形 穩定度額外空間 備註冒泡 o n2 o n2 穩定o 1 n小時較好 交換o n2 o n2 不穩定o 1 n小時較好 選擇o n2 o n2 不穩定o 1 ...

幾種排序演算法的比較

1.分類 非線性時間比較類排序 通過比較來決定元素間的相對位置關係,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間比較類排序 不通過比較來決定元素間的相對位置關係,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間比較類排序。2.複雜度 3.演算法相關...

幾種常用的比較排序實現

練習了一下幾種常用的比較排序演算法,包括氣泡排序 選擇排序 插入排序 快速排序 歸併排序等。include include include using namespace std 氣泡排序 最簡單的實現方法,比較相鄰兩數,把大數冒到後邊 void bubblesort int a,int n 選擇排...