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