插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。与冒泡排序和选择排序不同的是,插入排序的排序过程是一边比较一边交换的。插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。 插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。 插入排序基本思想是将待排序的元素逐个插入到已经排序好的序列中,直到所有元素都被插入为止。 具体实现过程如下: 1、遍历待排序的数组,将第一个元素视为已经排好序的元素。 2、从第二个元素开始,将其插入已经排好序的数组中的正确位置,使得插入后仍然保持有序。 3、重复步骤2,直到整个数组排序完成。 (如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。) 插入排序的时间复杂度为O(n^2),虽然它不如快速排序、归并排序等排序算法快,但在某些特定情况下,它可能比其他排序算法更高效。例如,当数组的规模比较小或者已经部分有序时,插入排序的效率会更高。 总之,插入排序是一种简单但实用的排序算法,可以用来对小规模数组进行排序,也可以作为其他排序算法的优化策略。 AI代码实现: 本地测试:package com.algorithm.sort; /** * @author LuoFei * @className: InsertionSort * @projectName algorithm * @description: TODO * @date 2023/2/19 18:22 */ public class InsertionSort { public static void insertionSort(int[] arr) { int n = arr.length; for (int i = 1; i < n; i++) { //获取未排序部分的第一个元素 int key = arr[i]; int j = i - 1; //从右到左遍历已排序的数组,将比key大的元素依次向右移动一位 while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } //将key插入到正确的位置 arr[j + 1] = key; } } public static void main(String[] args) { int arr[] = {5, 2, 8, 3, 9, 1}; insertionSort(arr); for (int i : arr) { System.out.print(i + ","); } } } 测试结果: