冒泡排序,选择排序,插入排序的解析与实现
基础排序算法解析
1. 冒泡排序
冒泡排序的核心思想就是:
从左到右,相邻元素进行比较。每次比较一轮,就会找到序列中最大的一个或最小的一个。这个数就会从序列的最右边冒出来。
以从小到大排序为例,第一轮比较后,所有数中最大的那个数就会浮到最右边;第二轮比较后,所有数中第二大的那个数就会浮到倒数第二个位置……就这样一轮一轮地比较,最后实现从小到大排序。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| void bubble(int *array, int n) { int i, j; int temp; for (i = 0; i < n - 1; i++) { for (j = 0; j < n - 1 - i; j ++) { if (array[j] > array[j + 1]) { temp = array[j + 1]; array[j + 1] = array[j]; array[j] = temp; } } } return; }
|
2. 选择排序
选择排序的核心思想是:
它在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| void select(int *array, int n) { int i, j; int temp; int min; for (i = 0; i < n - 1; i++) { min = i; for (j = i + 1; j < n; j++) { if (array[j] < array[min]) { min = j; } } if (min != i) { temp = array[i]; array[i] = array[min]; array[min] = temp; } }
return; }
|
3. 插入排序
插入排序的核心思想是
逐个将未排序的元素插入到已排序的部分中,构建有序序列
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
| void insert(int *array, int n) { int i, j; int temp; for (i = 1; i < n; i++) { temp = array[i]; for (j = i -1; j >= 0; j--) { if (array[j] > temp) { array[j + 1] = array[j]; } else { break; } } array[j + 1] = temp; } return; }
|
4. 快速排序