直接插入排序

直接插入排序

直接插入排序:基于有序数组元素内容的插入得来;

核心思想:将待排序的数据分为两个区间,已排序区间和待排序区间。

算法刚开始时,已排序空间有一个,在待排序空间中选择第一个元素与已排序空间最后一个元素比较

若比已排序的最大元素大,直接放入已排序空间最后一个位置,否则需要找到合适位置后进行插入。

直接插入排序

public static void insertaSort(int[] array){
        int n=array.length;
        if(n<=1){
            return ;
        }else{
            //外侧循环表示待排序区间
            for(int i=1;i<n;i++){
                int j=i-1,temp=array[i];
                //已排序区间,目的是将待排序区间的第一个数temp插入进去
                for(;j>=0;j--){
                    //如果temp小于已排序空间最后一个数,将该数向后移动一位
                    if(temp<array[j]){
                        array[j+1]=array[j];
                    }else{
                        //否则退出循环,说明已经找到位置
                        break;
                    }
                }
                //j+1就是找到的位置,因为在退出循环之前,一定是和插入位置的前一个位置进行比较,此时j是前一个位置的下标,所以插入位置是j+1
                array[j+1]=temp;
            }
        }
    }

算法的执行效率:最好 O(n)

​ 最坏 O(n^2)

算法的内存消耗:O(1)原地排序

算法的稳定性:插入排序是一个稳定性算法;