幾種排序演算法的思想

2021-04-23 23:12:06 字數 1820 閱讀 6363

一、氣泡排序

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[2]與a[3]的值,若a[2]大於a[3]則交換兩者的值,否則不變。再比較a[3]與a[4],依此類推,最後比較a[n-1]與a[n]的值。這樣處理一輪後,a[n]的值一定是這組資料中最大的。再對a[1]~a[n-1]以相同方法處理一輪,則a[n-1]的值一定是a[1]~a[n-1]中最大的。再對a[1]~a[n-2]以相同方法處理一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以公升序排列了。

優點:穩定,比較次數已知;

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

二、選擇排序

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先比較a[1]與a[2]的值,若a[1]大於a[2]則交換兩者的值,否則不變。再比較a[1]與a[3]的值,若a[1]大於a[3]則交換兩者的值,否則不變。再比較a[1]與a[4],依此類推,最後比較a[1]與a[n]的值。這樣處理一輪後,a[1]的值一定是這組資料中最小的。再將a[2]與a[3]~a[n]以相同方法比較一輪,則a[2]的值一定是a[2]~a[n]中最小的。再將a[3]與a[4]~a[n]以相同方法比較一輪,依此類推。共處理n-1輪後a[1]、a[2]、……a[n]就以公升序排列了。

優點:穩定,比較次數與氣泡排序一樣,資料移動次數比氣泡排序少;

缺點:相對之下還是慢。

三、插入排序

已知一組公升序排列資料a[1]、a[2]、……a[n],一組無序資料b[1]、b[2]、……b[m],需將二者合併成乙個公升序數列。首先比較b[1]與a[1]的值,若b[1]大於a[1],則跳過,比較b[1]與a[2]的值,若b[1]仍然大於a[2],則繼續跳過,直到b[1]小於a陣列中某一資料a[x],則將a[x]~a[n]分別向後移動一位,將b[1]插入到原來a[x]的位置這就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若無陣列a,可將b[1]當作n=1的陣列a)

優點:穩定,快;

缺點:比較次數不一定,比較次數越少,插入點後的資料移動越多,特別是當資料總量龐大的時候,但用鍊錶可以解決這個問題。

四、縮小增量排序

由希爾在2023年提出,又稱希爾排序。

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。發現當n不大是,插入排序的效果很好。首先取一增量d(d

優點:快,資料移動少;

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

五、快速排序

快速排序是氣泡排序的改進版,是目前已知的最快的排序方法。

已知一組無序資料a[1]、a[2]、……a[n],需將其按公升序排列。首先任取資料a[x]作為基準。比較a[x]與其它資料並排序,使a[x]排在資料的第k位,並且使a[1]~a[k-1]中的每乙個資料

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

缺點:不穩定。

經過一段時間的學習和程式設計,我已對上述幾種排序方法熟練掌握或有所了解。在此基礎上,經過我的思考和實踐,我研究出了一種新的排序演算法:分段插入排序。

分段插入排序

已知一組公升序排列資料a[1]、a[2]、……a[n],一組無序資料b[1]、b[2]、……b[m],需將二者合併成乙個公升序數列。先將陣列a分成x等份(x<

優點:快,比較次數少;

缺點:不適用於較少資料的排序,s的臨界值無法確切獲知,只能憑經驗取。

我設計的演算法或許優於某些演算法,但它也有它的優點、缺點和適用範圍。不僅排序演算法如此,任何演算法都一樣。沒有任何乙個人幹說自己的演算法是最好的。設計新演算法的過程其實就是增加其優點,減少其缺點和拓寬其適用範圍的過程。我最崇尚的一句話就是:「沒有最好,只有更好。」

幾種排序演算法思想

一 氣泡排序 已知一組無序資料a 1 a 2 a n 需將其按公升序排列。首先比較a 1 與a 2 的值,若a 1 大於a 2 則交換兩者的值,否則不變。再比較a 2 與a 3 的值,若a 2 大於a 3 則交換兩者的值,否則不變。再比較a 3 與a 4 依此類推,最後比較a n 1 與a n 的值...

幾種演算法思想概要

是一種在數學 管理科學 電腦科學 經濟學和生物資訊學中使用的,通過把原問題分解為相對簡單的子問題的方式求解複雜問題的方法。動態規劃常常適用於有重疊子問題 1 和最優子結構性質的問題,動態規劃方法所耗時間往往遠少於樸素解法。動態規劃背後的基本思想非常簡單。大致上,若要解乙個給定問題,我們需要解其不同部...

演算法思想 排序

排序並不是一種演算法思想,而是基於遍歷的一種演算法實現。形形色色的排序演算法,並不能絕對的認為哪一種排序最好,因為最好的度量指標究竟是耗時 記憶體占用亦或是穩定性是不確定的,這個要根據使用場景來決定,但是我們必須掌握各種排序方法的實現原理,這樣才能做到 具體問題具體分析 下圖為多種排序演算法的特性歸...