常用排序算法
- 冒泡排序
- 选择排序
- 插入排序
- 希尔排序
- 三向快速排序
- 归并排序
- 堆排序
- 快速排序
算法分析
冒泡排序
对N个数冒泡排序,需要进行N-1趟,每一趟从第零个数开始比较
void bubbleSort() {
int i, j;
for (i = 0; i < n; i ++) {
for (j = 0; j < n - i - 1; j ++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
选择排序
//增序
N = a.length;
for (int i = 0; i < N; i ++)
int min = i;
for (int j = i; j < N; j ++)
if (less(a[j], a[min])) min = j;//比较大小,如果小于,就赋值min
exch(a, i, min);//交换数组中索引i和min处的值
选择排序就是每次循环都选择最小的一个值放在循环起始位置处。
插入排序
//增序
N = a.length;
for (int i = 1; i < N; i ++)
for (int j = i; j > 0 && less(a[j], a[j - 1]); j --)
exch(a, j, j - 1);
插入排序就是从头开始每次将一个新的值插入到前面已经排好序的序列中。
希尔排序
int N = a.length;
int h = 1;
while (h < N / 3) h = h * 3 + 1;
while (h >= 1) {
//将数组变为h有序
for (int i = h; i < N; i ++)
for (int j = i; j >= h && less(a[j], a[j - h]); j -= h )
exch(a, j, j - h);
h = h / 3;
}
希尔排序是基于插入排序的。插入排序是从头开始,比较相邻的值,效率低;而希尔排序将位置相差h的值比较,此时数组已经是h有序数组。最后一步再比较相邻的值,效率较高。