《我的第一本算法書》
[日]石田保輝 宮崎修一/著
張貝/譯
/// <summary>
/// 冒泡排序算法 O(n^2)
/// 重複“從序列右邊開始比較相鄰兩個數字的大小,在根據結果交換兩個數字的位置”這一操作的算法
/// </summary>
/// <param name="arr"></param>
private void BubbleSort(int[] arr) {
int len = arr.Length, left = 0, right = 0, tmp = 0;
for(int i = 0; i < len; i++) {
for (int j = 0; j < len - 1; j++) {
left = len - 2 - j;
right = len - 1 - j;
if (arr[left] > arr[right]) {
tmp = arr[left];
arr[left] = arr[right];
arr[right] = tmp;
}
}
}
}
/// <summary>
/// 選擇排序 O(n^2)
/// 重複"從待排序的數據中尋找最小值,將其與序列最左邊的數字進行交換"這一操作的算法
/// </summary>
/// <param name="arr"></param>
private void SelectionSort(int[] arr) {
int len = arr.Length, index = 0, tmp = 0, min = 0;
for(int i = 0; i < len-1; i++) {
min = arr[i];
index = i;
for(int j = i+1; j < len; j++) {
if(min > arr[j]) {
min = arr[j];
index = j;
}
}
tmp = arr[i];
arr[i] = arr[index];
arr[index] = tmp;
}
}
/// <summary>
/// 插入排序
/// 從右側的未排序區域取出一個數據插入到左側已排序區域合適的位置
/// </summary>
/// <param name="arr"></param>
private void InsertionSort(int[] arr) {
int len = arr.Length, tmp = 0;
for(int i = 0; i < len; i++) {
for(int j = 0; j < i; j++) {
if (arr[i] < arr[j]) {
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
}
}