Java 插入排序算法

什么是插入排序?

插入排序(Insertion Sort)是一种简单直观的排序算法,它的工作原理是逐步构建最终的排序序列。它的实现思路类似于人类按顺序排序一组扑克牌的方式。

插入排序的步骤:

开始:假设第一个元素已经被排序,因此从第二个元素开始。

比较和插入:依次将每个未排序的元素插入到已排序的部分中的正确位置。

  • 将当前待排序元素与已排序部分的最后一个元素进行比较。

  • 如果当前元素小于已排序元素,则将已排序元素向右移动一个位置,为当前元素腾出插入空间。

  • 重复上述步骤,直到找到适当的插入位置。

重复:重复以上步骤,直到所有元素都被排序。

案例:

public class Insertion {
    public static void insertionSort(int[] arr) {
        // 使用插入排序算法对数组进行排序
        for (int i = 1; i < arr.length; i++) {
            // 将当前元素临时存储起来
            int temp = arr[i];
            // 从当前位置向前比较然后交换值
            int j;
            for (j = i; j > 0 && arr[j - 1] > temp; j--){
                // 如果前一个元素大于当前参考值,则前移前一个元素
                arr[j] = arr[j - 1];
            }
            // 插入当前临时变量到正确的位置
            arr[j] = temp;
        }
    }
    
    public static void main(String[] args) {
        // 创建一个整数数组
        int[] arr = {12, 11, 13, 5, 6};
        // 调用插入排序方法
        insertionSort(arr);
        // 通过Arrays工具类的toString()方法打印输出
        System.out.println(Arrays.toString(arr));
    }
}

详细解释:

外层循环

for (int i = 1; i < arr.length; i++) 
  • i = 1 开始遍历数组,直到 i < arr.length。我们从第二个元素开始(即索引 1),因为第一个元素在初始时已经被视为一个单独的排序区间,不需要处理。

保存当前元素

int temp = arr[i];
  • 将当前元素 arr[i] 保存到 temp 变量中,作为参考值。

内层循环 - 向前比较和移动元素

int j;
for (j = i; j > 0 && arr[j - 1] > temp; j--){
    // 如果前一个元素大于当前参考值,则前移前一个元素
    arr[j] = arr[j - 1];
}
  • ji 开始向前遍历,直到找到合适的位置或者到达数组的开始位置。

  • 如果 arr[j - 1] 大于 temp,则将 arr[j - 1] 移动到 arr[j] 的位置。

  • 这个过程持续进行,直到找到 temp 应插入的位置。

插入当前元素

arr[j] = temp;
  • temp 插入到找到的正确位置 arr[j] 中。

算法流程

  1. 外层循环遍历每个未排序的元素。

  2. 内层循环将当前元素与已排序部分的元素进行比较。

  3. 内层循环移动比当前元素大的元素,以空出位置。

  4. 将当前元素插入到空出的位置。

小结

插入排序是一种稳定的排序算法,即相同值的元素在排序后相对位置不变。适用于小型数据集或部分有序的数据。

欧了,到这里我应该解释的差不多啦,我是南极,大胆做自己,活出精彩的人生👊👊👊

  • 12
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值