插入排序

本文深入讲解插入排序算法的实现原理及步骤,通过具体代码示例展示如何将未排序的元素逐步插入到已排序序列中,确保数组最终完全有序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/**
 * @author kyle
 * @version 1.0 2018年11月29日 NEW
 * @function
 */
public class InsertTest {
     // 插入排序的思想是假设要插入元素之前数组已经是有序的,默认把第0个下标当成有序。
    public static void sort(int[] numbers) {
        
        // 因为假设第0个元素已经有序,所以遍历要从第一个元素开始,之后和前面的j[0]做对比。
        for (int i = 1; i < numbers.length; i++) {
            System.out.println("i = "+ i);
            int currentNumber = numbers[i]; // 获取当前i的值
            int j = i - 1; // j是获取前面已经有序的元素,第一次获取的是j[0], 把j[0]想成已经有序
            System.out.println("j: "+ j);
            while (j >= 0 && numbers[j] > currentNumber) { // 从小到大排序,如果前面的有序元素 下标[j]大于当前i的元素值,就交换, 一个一个的向右移位
                System.out.println("while...");
                System.out.println("j["+(j+1)+"] = "+ numbers[j]);
                numbers[j + 1] = numbers[j]; // 一个一个的向右移位
                j--;
            }
            
            System.out.println("j: " + j);
            System.out.println("j["+(j+1)+"] = "+ currentNumber);
            numbers[j + 1] = currentNumber; 
            // 如果没有移位j+1就相当于i,就是把i下标对应的元素还原到数组中。
            // 如果有移位,[j+1],就是j中要与当前i交换的下标位置。因为如果有交换在循环里面执行了j--,后面的[j+1]只是把上面减掉的下标再加回来。
            System.out.println("------------------------------------------");
        }
    }
    
    public static void main(String[] args) {
        int a[]  ={1,4,5,3};
        sort(a);
        
        for(int i=0;i<a.length;i++){
            System.out.print(a[i]+ " ");
        }
    }
}
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值