一、概念
1. 排序,就是使一串记录,按照其中的某个或
某些关键字
的大小,递增或递减的排列起来的操作。平时如果提到排序,通常指的是
排升序
(非降序)。通常意义上的排序,都是指的
原地排序(in place sort)
。
2. 两个
相等的数据
,如果经过排序后,排序算法能
保证其相对位置不发生变化
,则我们称该算法是
具备稳定性的
排序算法。
二、七大基于比较的排序
三、插入排序
把整个区间被分为有序区间和无序区间,每次选择
无序区间的第一个元素
,在有序区间内选择合适的位置插入。实现代码如下:
public class InsertSort {
public static void insertSort(int[] arr) {
int cur = 0;
int value = 0;
for(int bound = 1;bound < arr.length; bound++){
value = arr[bound];
for(cur = bound - 1;cur >= 0; cur--){
if(value < arr[cur]){
arr[cur + 1] = arr[cur];
}else{
break;
}
}
arr[cur + 1] = value;
}
}
}
※ 性能分析:
时间复杂度 | 空间复杂度 | 稳定性 | ||
最好 | 平均 | 最坏 | ||
O(N) | O(N^2) | O(N^2) | O(1) | 稳定 |
数据有序 | 数据逆序 |
初始数据越接近有序,时间效率越高。
四、希尔排序
希尔排序法又称
缩小增量法
。希尔排序法的基本思想是:先选定一个整数gap,把待排序文件中所有记录分成个组,所有距离为gap的记录分在同一组内,并对每一组内的记录进行排序。然后重复上述分组和排序的工作。当 gap == 1
时,所有记录在统一组内排好序。
1.
希尔排序是对直接插入排序的
优化
。
2. <