java实现插入排序

概述

将待排序数组分为有序区和无序区两部分,不断往有序区里插入元素,直到有序区的长度为数组长度。初始时,有序区数组长度为1。默认为数组第一个元素(索引为0)。

图解

理解i j
备注:图来自黑马程序员满一航老师的视频,感兴趣的小伙伴可以自行b站搜索。

实现

package com.lovehena.bilibili.sort;

import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;

/*
 *   java实现插入排序
 *      将待排序数组分为有序区和无序区两部分,
 *      不断往有序区里插入元素,
 *      直到有序区的长度为数组长度。
 *      初始时,有序区数组长度为1。
 *      默认为数组第一个元素(索引为0)。
 * */
@Slf4j
public class InsertSort {
    public static void main(String[] args) {
        int[] arr = {0, 3, 1, -9};
        log.info("排序前的数组:{}", Arrays.toString(arr));
        insertSort(arr);
        log.info("排序后的数组:{}", Arrays.toString(arr));

        log.info("---------------------------");
        int[] arr2 = {100, 9, -1, -9, 1000, 5, 0};
        log.info("排序前的数组:{}", Arrays.toString(arr2));
        insertSort(arr2);
        log.info("排序后的数组:{}", Arrays.toString(arr2));
    }

    private static void insertSort(int[] arr) {
        // i:待插入元素的索引 假设有序区已经有一个元素 且索引为0
        for (int i = 1; i < arr.length; i++) { // i最大值为arr.length-1 即指向数组最后一个元素
            int temp = arr[i];
            int j = i - 1; // j表示有序区元素的索引
            while (j >= 0) {
                if (temp < arr[j]) {
                    // j+1=i 会覆盖arr[i]的值 所以需要把arr[i]存起来
                    // 将较大值移入未排序区
                    arr[j + 1] = arr[j];
                } else {
                    break;
                }
                j--;
            }
            arr[j + 1] = temp; // 将待插入元素移入排序区
        }
    }
	// TODO 扩展:数组从大到小排序如何实现?将while循环改为for循环如何实现?
}

输出

输出

扩展

数组从大到小排序如何实现?将while循环改为for循环如何实现?

最后

好了,如果对你有帮助,欢迎点个免费的赞哦。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值