前言
插入排序可能没有冒泡排序和选择排序如雷贯耳,猛一看比较复杂,其实理解思想后,个人感觉比冒泡排序学起来还简单,而且虽说时间复杂度也是O(n2)级别,但其实插入排序可以提前终止内层循环,其实是要比选择排序要快的。写博客之前本来不想提时间复杂度这个概念的,因为我的态度就是稳扎稳打,先学会实现,不靠百度纯手打,再一步一步讨论时间复杂度以及各个算法的优劣,甚至到最后封装成泛型实现类的排序等等。道生一,一生二,二生三,三生万物。古人诚不欺我,哈哈,扯远了。
插入排序
待排序数据插入到前面已经排好的数据中(每次插完,前面又是新的排好的序列)
void insertSort(int[] array){
//第一层也是控制循环用的,从1开始,仔细体会为什么,默认第一个元素排好序,i为几,就代表已经排好了几个
for (int i = 1; i < array.length; i++) {
//此时 a[j]待排序数据不断的和前面已经排好的元素比较,因此要j--
for (int j = i; j > 0; j--) {
//只要比前面小,就不停向前面比较,直到比前面大为止
if(array[j]<array[j-1]){
int temp = array[j];
array[j] = array[j - 1];
array[j - 1] = temp;
}else{
//当前数值比前面最后一个数要大,即比前面所有的数都大,前面的数肯定是已经排好序了,插入排序可以提前终止内层循环,因此插入排序要比选择排序要快
break;
}
}
}
}