資料結構之排序演算法

2021-07-29 10:21:13 字數 1821 閱讀 2882

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;//找到元素插入位置

)

演算法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;

)

3 直接選擇排序

通過直接找到最小記錄未知,直接交換到正確位置,對待排序檔案(r1,r2,…,rn)進行n-1次選擇操作,其中第i次操作是選擇第i小(或大)的記錄放在第i個(或n-i+1)位置上。複雜度o(n2)。選擇排序是一種不穩定的排序演算法,如序列5,8,5,2,9,第一遍選擇第乙個元素5和最小元素2進行交換,交換後原序列中兩個5的次序發生了變化,因此選擇排序是不穩定排序。

演算法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;//兩個元素交換

)

4 shell排序

把記錄按下標的一定增量分組,對每組使用直接插入排序法,隨著增量逐漸減少,每組包含的記錄越來越多,當增量值減至1時,整個檔案恰好被分成乙個組,演算法便終止。shell排序是不穩定排序。

如,輸入檔案在增量值取8時共分成8個組:

r1, r9; r2, r10; r3, r11; ……; r8, r16;

缺點:目前為止還不知道如何去選擇能夠產生最好結果的漸減序列。

5 直接插入、冒泡和直接選擇三種簡單排序演算法比較

三種簡單排序演算法在最壞情況下都需要o(n2)時間,都是通過兩次迴圈實現。插入排序是依次對前i個記錄進行排序,冒泡和選擇排序則是依次從剩餘記錄中找到第i小記錄,但氣泡排序通過不斷比較交換相鄰記錄實現,直接選擇排序通過直接找到最小記錄位置,直接交換到正確位置。因此,直接選擇排序可以看作是對氣泡排序的改進,優於氣泡排序。

演算法qsort(r,m,n)

qsort1[遞迴出口]

if m1;//第n+1個元素為假定的元素,其值大於檔案中的任意值

while ido

qsort(r,m,j-1);//將原檔案分成了兩部分

qsort(r,j+1,n);

}

7 堆排序

不穩定排序,複雜度為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位置插入...