图文并茂!一文教你掌握十大排序算法之直接插入排序算法

1. 直接插入排序算法介绍

直接插入排序是一种非常好理解的排序算法,它的原理是将数组分为两个部分,一部分是已排序的,另外一部分是未排序的,每次排序都会从未排序的那一部分取出一个数,从有序序列的最后一个元素开始往前扫描,直至找到插入的位置。

以升序为例,目前有一个数组:[3, 2, 1, 5, 4, 6]进行直接插入排序,第一个元素无需与其它元素比较,是有序序列的第一个元素

所以我们从第一个元素开始排序:

第一轮排序(数字2):2 < 3,所以2需要和3做交换,序列为[2, 3, 1, 5, 4, 6],此时因为2已经是有序序列的第一个元素,所以确定插入位置,对下一个数字进行排序。

第二轮排序(数字1):1 < 3,所以1和3交换位置,序列为[2, 1, 3, 5, 4, 6],此时1前面还有元素,需要继续做比较;1 < 2,所以1与2交换位置,此时1为有序序列的第一个元素,确定插入位置,对下一个数字进行排序。

第三轮排序(数字5):5 > 3,无需交换位置,确定插入位置,对下一个数字进行排序。序列为[1, 2, 3, 5, 4, 6]

第四轮排序(数字4):4 < 5,4和5交换位置,序列为[1, 2, 3, 4, 5, 6],虽然此时已经有序,但计算机并不知道,它会继续与前一个元素做比较;4 > 3,无需交换位置,确定插入位置,对下一个数字进行排序。

第五轮排序(数字6):6 > 5,无需交换位置,确定插入位置,排序完成。

2. 代码实现

/**
 * @author Zeng
 * @date 2020/2/29 11:08
 */
public class 插入排序1 {

    public static void swap(int[] arr, int i, int j){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    public static void insertSort(int[] arr){
        for (int i = 1; i < arr.length; i++){
            int current = arr[i];
            int tempIndex = i - 1;
            //寻找插入位置
            while (tempIndex >= 0 && arr[tempIndex] > current){
                swap(arr, tempIndex, tempIndex + 1);
                tempIndex--;
            }
            System.out.print("第"+i+"轮排序结果:");
            for (int j : arr) {
                System.out.print(j+" ");
            }
            System.out.println();
        }
    }

    public static void main(String[] args) {
        int[] arr = new int[]{3, 2, 1, 5, 4, 6};
        insertSort(arr);

    }

}

 

发布了50 篇原创文章 · 获赞 46 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41949328/article/details/104580820