排序及相關一(演算法導論二章)

2021-06-14 06:02:08 字數 1320 閱讀 8891

一、插入排序

偽**:

insertion-sort (a, n) ⊳ a[1 . . n]

for j ← 2 to n

do key ← a[ j]

i ← j – 1

while i > 0 and a[i] > key

do a[i+1] ← a[i]

i ← i – 1

a[i+1] = key

**

//insertion sort

void insertionsort (int *array, int length)

array[j + 1] = key;

}}

二、選擇排序

偽**

selection-sort (a)

n = a.length

for j = 1 to n - 1

smallest = j

for i = j - 1 to n

if a[i]  < a[smallest]

smallest = i

exchange a[j]  with a[smallest]

**

//selection sort

void selectionsort (int *array, int length)

} temp = array[i];

array[i] = array[smallest];

array[smallest] = temp;

}}

三、歸併排序

void merge (int *array, int start, int middle, int end)

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

l[n1] = int_max;

r[n2] = int_max;

i = 0;

j = 0;

for (k = start; k <= end; ++k)

else

}delete l;

delete r;

}//mergesort

void mergesort (int *array, int start, int end)

}

四、 氣泡排序

void bubblesort (int *array, int length)

} }}

演算法導論 一 演算法基礎

迴圈不變式主要用來幫助我們理解程式的正確性。迴圈不變式的三條性質 初始化 迴圈的第一次迭代之前,它為真。保持 如果迴圈的某次迭代之前它為真,那麼下次迭代之前它仍為真。終止 再迴圈終止時,可驗證演算法的正確性。偽 的重要性在於它可以簡潔地表達出演算法的本質 縮排代表塊結構 採用縮排代表塊結構可以大大提...

(一)演算法基礎 排序演算法

作為演算法的入門,排序演算法再合適不過了,在這裡我主要介紹四種排序演算法 插入排序 歸併排序 快速排序以及希爾排序。不過在介紹這些演算法之前,我們先來做一些準備工作。一 演算法測試函式 在實現乙個演算法後,必然要對這個演算法進行除錯和分析,這裡我寫了一些函式用於演算法的測試。隨機數組生成函式 int...

每日一演算法 》氣泡排序

氣泡排序定義 它重複地走訪過要排序的數列,一次比較兩個元素,如果他們的順序錯誤就把他們交換過來。走訪數列的工作是重複地進行直到沒有再需要交換,也就是說該數列已經排序完成。這個演算法的名字由來是因為越小的元素會經由交換慢慢 浮 到數列的頂端,故名。氣泡排序演算法的運作如下 比較相鄰的元素。如果第乙個比...