插入排序是排序算法中的基础算法
思路:从第2个元素开始向前遍历,依次和前面的元素进行比较,发现比前面的元素小时就和前面的元素交换否则遍历停止。第二趟从第3个元素开始,依次类推直到第n个元素。
稳定性:稳定的
时间复杂度:
最佳的情况是有序状态下,n-1趟遍历每趟只需要比较1次,O(n)
最差的情况是逆序状态下,需要(n-1)+…+1=n(n-1)/2, O(n^2)
所以平均状态下,O(n^2)
空间复杂度:O(1)
Java版的一种实现如下:
public void sort(T[] arr) {
if (arr == null || arr.length == 1) {
return;
}
int len = arr.length;
int j;
for (int i = 1; i < len; i++) {
j = i;
while (j > 0) {
if (arr[j - 1].compareTo(arr[j]) > 0) {
swap(arr, j - 1, j);
j--;
} else {
break;
}
}
}
}