一:直接插入排序
直接插入排序是一种简单的插入排序法,其基本思想是:把待排序的逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列。实际中我们玩扑克牌时,就用了插入排序的思想。

/**
* 时间复杂度:最好:O(n):本身就是有序的{1,2,3,4,5}
* 最坏 O(n^2):{5,4,3,2,1}
* 空间复杂度:O(1);(没有额外的申请空间)
* 稳定性:稳定的排序
* @param array
*/
public static void insertSort(int[] array){
for (int i = 1; i < array.length; i++) {
//第一个元素就不用比较了,直接看第二个元素能不能插进去,i:每次要插入的元素的下标
int j = i - 1;
int tmp = array[i];
for (; j >= 0 ; j--) {
if(array[j] > tmp){ //加等号就不稳定了
array[j + 1] = array[j];//你往前移动,让tmp插进去
}else{
break;
}
}
array[j +1] = tmp;//一个是循环里刚好(array[i] < tmp):array[j+1] = tmp;
}
}

直接插入排序的特性总结:1. 元素集合越接近有序,直接插入排序算法的时间效率越高2. 时间复杂度:O(N^2)3. 空间复杂度:O(1),它是一种稳定的排序算法4. 稳定性:稳定





