插入排序的代码实现虽然没有冒泡排序和选择排序那么大略粗暴,但它的事理该当是最随意马虎理解的了,由于只要打过扑克牌的人都该当能够秒懂。

插入排序基本思想是将待排序的元素逐个插入到已经排序好的序列中,直到所有元素都被插入为止。

详细实现过程如下:

1、遍历待排序的数组,将第一个元素视为已经排好序的元素。

跟着AI学算法排序算法插入排序还原排序过程

2、从第二个元素开始,将其插入已经排好序的数组中的精确位置,使得插入后仍旧保持有序。

3、重复步骤2,直到全体数组排序完成。

(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。

实行过程请移步文章末端:排序实行过程。

插入排序的韶光繁芜度为O(n^2),虽然它不如快速排序、归并排序等排序算法快,但在某些特定情形下,它可能比其他排序算法更高效。
例如,当数组的规模比较小或者已经部分有序时,插入排序的效率会更高。

总之,插入排序是一种大略但实用的排序算法,可以用来对小规模数组进行排序,也可以作为其他排序算法的优化策略。

AI代码实现:

本地测试:

为了能够打印排序过程,代码稍作修正。

package com.algorithm.sort;import java.util.Arrays;/ @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++) { System.out.println("第"+i+"轮"); //获取未排序部分的第一个元素 int key = arr[i]; System.out.println("选择"+i+"号位数字“"+key+"”为基准数字,与前面已排序数字比较"); int j = i - 1; //从右到左遍历已排序的数组,将比key大的元素依次向右移动一位 while (j >= 0) { System.out.print("比较:["+j+", "+i+"]"); if (arr[j] <= key) { System.out.println(", 顺序精确"); break; } System.out.println(", "+j+" 号位后移一位;"); arr[j + 1] = arr[j]; j--; } //将key插入到精确的位置 arr[j + 1] = key; System.out.println("基准数字”"+key+"“插入"+(j + 1)+"号位置"); System.out.println("新数组:"+ Arrays.toString(arr)); System.out.println("------------------------------------------"); } } public static void main(String[] args) { int arr[] = {5, 2, 8, 3, 9, 1}; System.out.println("插入排序"); System.out.println("初始数组:"+Arrays.toString(arr)); System.out.println("=========================================="); insertionSort(arr); System.out.println("=========================================="); System.out.print("终极数组:"+Arrays.toString(arr)); }}

排序实行过程:

插入排序初始数组:[5, 2, 8, 3, 9, 1]==========================================第1轮选择1号位数字“2”为基准数字,与前面已排序数字比较比较:[0, 1], 0 号位后移一位;基准数字”2“插入0号位置新数组:[2, 5, 8, 3, 9, 1]------------------------------------------第2轮选择2号位数字“8”为基准数字,与前面已排序数字比较比较:[1, 2], 顺序精确基准数字”8“插入2号位置新数组:[2, 5, 8, 3, 9, 1]------------------------------------------第3轮选择3号位数字“3”为基准数字,与前面已排序数字比较比较:[2, 3], 2 号位后移一位;比较:[1, 3], 1 号位后移一位;比较:[0, 3], 顺序精确基准数字”3“插入1号位置新数组:[2, 3, 5, 8, 9, 1]------------------------------------------第4轮选择4号位数字“9”为基准数字,与前面已排序数字比较比较:[3, 4], 顺序精确基准数字”9“插入4号位置新数组:[2, 3, 5, 8, 9, 1]------------------------------------------第5轮选择5号位数字“1”为基准数字,与前面已排序数字比较比较:[4, 5], 4 号位后移一位;比较:[3, 5], 3 号位后移一位;比较:[2, 5], 2 号位后移一位;比较:[1, 5], 1 号位后移一位;比较:[0, 5], 0 号位后移一位;基准数字”1“插入0号位置新数组:[1, 2, 3, 5, 8, 9]------------------------------------------==========================================终极数组:[1, 2, 3, 5, 8, 9]