Java基础随笔-直接插入排序

算法思想

直接插入排序的基本思想是:将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过为止。

实现过程

①. 从第一个元素开始,该元素可以认为已经被排序

②. 取出下一个元素,在已经排序的元素序列中从后向前扫描

③. 如果已经排好序的最后一个元素比这个取下的值大,将该元素移到下一位置

④. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置

⑤. 将新元素插入到该位置后

⑥. 重复步骤②~⑤

代码实现

/**
 * ClassName:StraightInsertionSort1
 * Author:LFM
 * Date:2019/6/16 17:12
 **/
public class StraightInsertionSort1 {
    public static void main(String[] args) {
        int [] a = {6,9,1,2,8,7};
        System.out.println("排序前:"+ Arrays.toString(a));
        sort(a);
        System.out.println("排序后:"+Arrays.toString(a));
    }

    public static void sort(int[] a) {
        if (a == null || a.length == 0) {
            return;
        }

        for (int i = 1; i < a.length; i++) {
            int j = i - 1;
            int temp = a[i]; // 先取出待插入数据保存,因为向后移位过程中会把覆盖掉待插入数
            while (j >= 0 && a[j] > temp) { // 如果是比待插入数据大,就后移
                a[j+1] = a[j];
                j--;//达到从后向前比较的效果
            }
            a[j+1] = temp; // 找到比待插入数据小的位置,将待插入数据插入
        }
    }
}

运行结果

在这里插入图片描述

时间复杂度

直接插入排序不是稳定的排序算法。在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_42341232/article/details/92418631