基础排序算法-------插入排序
实现过程:
插入排序的过程就像整理桥牌的过程;每次将待排元素中的第一个元素插入到有序区间的合适位置,为了给当前待排元素腾出位置,需要将有序区间内所有大于待排元素的其他元素都向右移动一位;
与选择排序一样,待排元素左边区间的元素是有序的,但是它们的位置并不确定,因为可能会被移动,当待排索引到达数组右端时,整个数组就有序了。
特点:
与选择排序不同,插入排序所需要的时间取决于输入时元素的顺序;若初始数据越接近有序,则排序速度就越快,所以插入排序经常用于高阶排序算法的优化手段之一。
时间复杂度:最好的情况下为O(N),其他情况下为O(N^2)
空间复杂度:O(1)
稳定性:稳定
1.基础插入排序
将无序区间的第一个元素作为待排元素,不断与前一元素交换位置而到达合适位置。
代码实现:
public static void insertionShort(int[] arr) {
//[0,i]为有序区间
//[j,arr.length)为无序区间
//j指向当前待排的那个元素
for (int i = 0; i < arr.length - 1; i++) {
for (int j = i + 1; j > 0; j--)