1 直接插入排序
將乙個記錄插入到已經排好序的有序表中,只有當排序結束時每個元素才能進入到正確的位置,複雜度為o(n2)。
優點:演算法簡單、易行,當待排序記錄數量較少時,該演算法非常有效;
缺點:資料規模較大時,效率比較低。
演算法insertsort(r,n)
insertsort1.[插入排序]
for j=2 to n do
(i = j - 1;//每次迴圈將rj插入到r1,...,rj-1之中
k = kj;
r = rj;
while i>0 and k1 = ri;//移動
i = i-1;
)ri+1 = r;//找到元素插入位置
)
3 直接選擇排序演算法bubble(r,n)
bubble1.[終止位置初始化]
bound = n;
bubble2.[冒泡過程]
while bound!=0do(
t = 0;//t用來記錄一趟冒泡最後記錄交換的位置
for j=1
to bound-1do(
if kj>kj-1
then
(rj <-> rj+1;//交換兩個元素
t = j;))
bound = t;
)
通過直接找到最小記錄未知,直接交換到正確位置,對待排序檔案(r1,r2,…,rn)進行n-1次選擇操作,其中第i次操作是選擇第i小(或大)的記錄放在第i個(或n-i+1)位置上。複雜度o(n2)。選擇排序是一種不穩定的排序演算法,如序列5,8,5,2,9,第一遍選擇第乙個元素5和最小元素2進行交換,交換後原序列中兩個5的次序發生了變化,因此選擇排序是不穩定排序。
4 shell排序演算法ssort(r,n)
//直接選擇排序演算法,該演算法排序檔案(r1,r2,...,rn),將第i大元素放在第n-i+1個位置上
ssort1.[排序]
for j=n to
2step-1do(
t = 1;
for i=2
to j do
(if kt < ki then t=i;//每次選出最大元素
)rj <-> rt;//兩個元素交換
)
把記錄按下標的一定增量分組,對每組使用直接插入排序法,隨著增量逐漸減少,每組包含的記錄越來越多,當增量值減至1時,整個檔案恰好被分成乙個組,演算法便終止。shell排序是不穩定排序。
如,輸入檔案在增量值取8時共分成8個組:
r1, r9; r2, r10; r3, r11; ……; r8, r16;
缺點:目前為止還不知道如何去選擇能夠產生最好結果的漸減序列。
5 直接插入、冒泡和直接選擇三種簡單排序演算法比較
三種簡單排序演算法在最壞情況下都需要o(n2)時間,都是通過兩次迴圈實現。插入排序是依次對前i個記錄進行排序,冒泡和選擇排序則是依次從剩餘記錄中找到第i小記錄,但氣泡排序通過不斷比較交換相鄰記錄實現,直接選擇排序通過直接找到最小記錄位置,直接交換到正確位置。因此,直接選擇排序可以看作是對氣泡排序的改進,優於氣泡排序。
7 堆排序演算法qsort(r,m,n)
qsort1[遞迴出口]
if m1;//第n+1個元素為假定的元素,其值大於檔案中的任意值
while ido
qsort(r,m,j-1);//將原檔案分成了兩部分
qsort(r,j+1,n);
}
不穩定排序,複雜度為o(nlog2n)
資料結構之排序演算法
1.插入排序 直接插入排序 include void insertsort int unsort int length unsort j temp int main void insertsort num,7 int i 0 for i i 7 i return 0 折半插入排序 include v...
資料結構之排序演算法
學過好久的東西,感覺都忘記的差不多了,雖然可能日常寫 的過程之中也可能寫過一些演算法,但是從來都沒有規整,最近忙裡偷閒,寫點關於排序的演算法,當然好多人都寫過一些很不錯的演算法blog,我寫一下,只是方便自己日後檢視,當然也給有需要的朋友一些參考,歡迎指正 排序演算法有 氣泡排序,選擇排序,插入排序...
資料結構之排序演算法
這是我在學習資料結構的時候,寫的一些簡單 關於各種排序,查詢演算法,可以作為他人學習資料結構的時候參考用 由於寫的比較匆忙,難免有問題,如有問題,歡迎指正!include include 插入排序 對於每乙個元素位置i,先查詢他對於前面已排序的位置j,然後 再將j到i之間的陣列往後移位,將j位置插入...