基本思想:
将待排序数组看作一个有序表和一个无序表
最开始有序表中只包含一个元素,也就是数组第一个元素,剩下的元素组成无序表
每一轮将无序表的第一个元素插入到有序表的正确位置,使得有序表仍然有序
总共需要进行数组长度 - 1轮排序
代码实现:
//插入排序
public void insertSort() {
int temp;
for (int i = 1; i < array.length; i++) {
for (int j = i; j >= 1 && array[j] < array[j - 1]; j--) {
temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}
}
}
时间复杂度:O(n²)
稳定性:
由于每轮交换前进行的两两比较,是从后向前进行的,也就是说相同元素中位置靠后的,在插入后仍然位置靠后,相对位置不变,故插入排序是稳定的