开发喵星球

关卡3:插入排序(Insertion Sort)

pPeHp90.png pPeHkB4.png

本文内容是对插入排序的梳理和总结,本文内容包括:

排序算法十大经典方法

  1. 冒泡排序:比较相邻元素并交换,每一轮将最大的元素移动到最后。
  2. 选择排序:每一轮选出未排序部分中最小的元素,并将其放在已排序部分的末尾。
  3. 插入排序:将未排序部分的第一个元素插入到已排序部分的合适位置
  4. 希尔排序:改进的插入排序,将数据分组排序,最终合并排序
  5. 归并排序:将序列拆分成子序列,分别排序后合并,递归完成
  6. 快速排序:选定一个基准值,将小于基准值的元素放在左边,大于基准值的元素放在右边,递归排序
  7. 堆排序:将序列构建成一个堆,然后一次将堆顶元素取出并调整堆
  8. 计数排序:统计每个元素出现的次数,再按照元素大小输出
  9. 桶排序:将数据分到一个或多个桶中,对每个桶进行排序,最后输出
  10. 基数排序:按照元素的位数从低到高进行排序,每次排序只考虑一位

插入排序(Insertion Sort)

插入排序是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用 in-place 排序(即只需用到 O(1) 的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

算法步骤

  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
  3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
  4. 重复步骤 3,直到找到已排序的元素小于或者等于新元素的位置;
  5. 将新元素插入到该位置后;
  6. 重复步骤 2~5。

图解算法

如果下图不动,点击这里查看在线的图解

代码实现

/**
 * 插入排序
 */
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;
}

算法分析

   
分类:数据结构和算法 作者:开发喵 发表于:2023-08-11 09:06:24 阅读量:117
<<   >>


powered by kaifamiao