算法学习直接插入排序
Posted riches
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法学习直接插入排序相关的知识,希望对你有一定的参考价值。
一、引言
今天学习第三种排序算法:直接插入排序,以前没怎么详细了解过,今天来看看图解一下~~
二、直接插入算法
插入算法工具类
/** * 直接插入排序算法工具类 */ public class ChaRuUtil { /** * 直接插入排序【对外暴露静态方法】 */ public static void insertionSort(int[] arr) { System.out.println("========排序前的数组,元素为:" + showItem(arr) + "========"); //1、定义变量 int value;//待插入元素 int index;//初始值为待插入元素前一个元素的索引 //2、循环数组进行插入 for (int i = 1; i < arr.length; i++) { //PS:i从第二个元素开始,我们默认第一个元素是有序的,循环条件是小于数组长度,因为也要将最后一个元素插入到前面的序列 value = arr[i]; index = i - 1;//初始为前一个元素 System.out.println("第【" + i + "】次排序时待插入元素为:" + value + " index初始化为:" + index); //3、while循环,当插入元素比index对应的元素小时,index对应的元素向后移动一位,并使index自减1进行下次循环 while (index >= 0 && value < arr[index]) { //4、每当前面的元素比待插入元素大,就向后移动一个位置,这时候前面就会多出一个位置来插 arr[index + 1] = arr[index]; //5、index减少1以后,下次循环继续往前比较 index--; } //6、当退出循环,表明已经找到了待插入位置,即index + 1 arr[index + 1] = value; System.out.println("第【" + i + "】次排序后的数组,元素为:" + showItem(arr) + "========"); System.out.println(); } } /** * 返回数组字符串 */ public static String showItem(int[] arr) { String itemStr = ""; if (null != arr) { itemStr = "【 "; for (int item : arr) { itemStr = itemStr + " " + item; } itemStr += " 】"; } return itemStr; } }
测试类
/** * 直接插入排序工具测试类 */ public class ChaRuTest { public static void main(String[] args) { //1、设置乱序数组 int[] arr = {1, 8, 3, 6, 9, 4, 5}; //2、调用直接插入排序工具类 ChaRuUtil.insertionSort(arr); } }
解析
基本思想:类似于我们玩扑克牌的时候,每抽一张牌就根据大小插入手中的场景;每次循环过程中,我们都选取一个元素去插入已经排序好的部分元素,最终排序完成~
时间复杂度:O(n²)
图解:
参考资料:
以上是关于算法学习直接插入排序的主要内容,如果未能解决你的问题,请参考以下文章