《我的第一本算法书》
[日]石田保辉 宫崎修一/著
张贝/译
冒泡 | 选择 | 插入
/// <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;
}
}
}
}