十大排序算法-插入排序

public static int[] insertionSort(int[] arr) {
    for (int i = 1; i < arr.length; i++) {
        int preIndex = i - 1;
        int current = arr[i];
        while (preIndex >= 0 && current < arr[preIndex]) {
            arr[preIndex + 1] = arr[preIndex];
            preIndex -= 1;
        }
        arr[preIndex + 1] = current;
    }
    return arr;
}

这段代码是一个插入排序算法的实现。插入排序是一种简单直观的排序算法,其基本思想是将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置,直到整个数组有序为止。

让我们逐步解释这段代码的过程:

  1. public static int[] insertionSort(int[] arr): 这是一个公共静态方法,用于对传入的整数数组进行插入排序,并返回排序后的数组。

  2. for (int i = 1; i < arr.length; i++): 外层循环是插入排序的主要循环。它从数组的第二个元素开始遍历(索引1),因为第一个元素默认是已排序的。

  3. int preIndex = i - 1;: 在每一轮排序开始时,preIndex被初始化为当前索引i的前一个索引,即当前元素的前一个元素的索引。

  4. int current = arr[i];: 获取当前索引i处的元素值,存储在变量current中,准备将其插入到正确的位置。

  5. while (preIndex >= 0 && current < arr[preIndex]) { ... }: 在内层循环中,进行元素的比较与插入操作。当preIndex大于等于0且current小于已排序部分的元素时,进入循环。

  6. arr[preIndex + 1] = arr[preIndex];: 将已排序部分中较大(或较小)的元素向右移动一个位置,为current腾出插入位置。

  7. preIndex -= 1;: 将preIndex向左移动,继续向前寻找合适的插入位置。

  8. arr[preIndex + 1] = current;: 在内层循环结束后,将current插入到正确的位置,即preIndex + 1处。

  9. return arr;: 最后返回排序完成后的整数数组。

插入排序的核心思想是将未排序部分的元素逐个插入到已排序部分的正确位置,以此来构建有序数组。它类似于我们打扑克牌时,将新抽到的牌插入到手中已排序的牌中,使得手中的牌始终保持有序。插入排序的时间复杂度为O(n^2),虽然效率没有快速排序或归并排序高,但对于小规模数据或部分有序的数组,插入排序可能更有效。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值