前言
文本已收录至我的GitHub仓库,欢迎Star:github.com/bin39232820…
种一棵树最好的时间是十年前,其次是现在
我知道很多人不玩qq了,但是怀旧一下,欢迎加入六脉神剑Java菜鸟学习群,群聊号码:549684836 鼓励大家在技术的路上写博客
叨絮
之前小六六一直觉得自己的算法比较菜,算是一个短板吧,以前刷题也还真是三天打鱼,两台晒网,刷几天,然后就慢慢的不坚持了,所以这次,借助平台的活动,打算慢慢的开始开刷,并且自己还会给刷的题总结下,谈谈自己的一些思考,和自己的思路等等,希望对小伙伴能有所帮助吧,也可以借此机会把自己短板补一补,希望自己能坚持下去呀
插入法排序原理
其实这个东西,理解起来还是蛮简单的,可能是因为这个只是数据结构的前面的东西,所以不是那么难,插入排序,其实每个人都有做过现实中的例子,大家肯定都打过牌吧,不知道大家摸牌的习惯是什么,小六六摸牌就喜欢把摸到的牌先放到一起(此时相当于一个无序的数组),然后一张张拿,从第二张开始,每次拿得怕牌都和手上的牌排序,到拿完最后一张牌,那小六六手上的牌就是全部排号序的了。
利用插入法对无序数组排序时,我们其实是将数组R划分成两个子区间R[1..i-1](已排好序的有序区)和R[i..n](当前未排序的部分,可称无序区)。插入排序的基本操作是将当前无序区的第1个记录R[i]插人到有序区R[1..i-1]中适当的位置上,使R[1..i]变为新的有序区。因为这种方法每次使有序区增加1个记录,通常称增量法。
图解:根据其原理,我们把该无序数列看成两个部分,我们不难看出图中,首先我们把第一位3看成是有序数列,剩下的作为无序数列,因为要把后面的无序数列中的数插入到前面有序数列,所以依次把后面的数抽出,在前面找到合适位置插入。如图,先抽出44,与前面比较,比3大放在3后面,再抽出38,与前面比较,比44小,比3大,所以插入到3后面。依次类推,直到最后的一个数也插入到前面的有序数列中。
代码实现
package com.github.brandonbai.pdfDemo.util; import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; /** * @author 小六六 * @version 1.0 * @date 2020/5/14 17:59 */ public class InsertSort { public static void main(String[] args) { //测试一下冒泡排序的速度O(n^2), 给80000个数据,测试 //创建要给80000个的随机的数组 int[] arr = new int[80000]; for(int i =0; i < 80000;i++) { arr[i] = (int)(Math.random() * 8000000); //生成一个[0, 8000000) 数 } Date data1 = new Date(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String date1Str = simpleDateFormat.format(data1); System.out.println("排序前的时间是=" + date1Str); //测试插入排序 insertSort(arr); Date data2 = new Date(); String date2Str = simpleDateFormat.format(data2); System.out.println("排序后的时间是=" + date2Str); System.out.println(Arrays.toString(arr)); } /** * @Des 插入排序 * @Author 小六六 * @Date 2020/5/15 10:20 */ public static void insertSort(int[] arr) { //先定义 需要插入的值和位置 int intsertVal=0; int insertIndex=0; for (int i=1;i<arr.length;i++){ //从第二个元素开始进行插入排序 //要排序这个元素的值 intsertVal=arr[i]; //定义 要插入这个数前面一个数的下标 insertIndex=i-1; while (insertIndex>=0&&intsertVal<arr[insertIndex]){ //条件是 要插入的那个元素,和它前面排序好的元素去对比,找到它需要插入的位置 //如果是比他小,说明这个当前这个要往后移动一个位置 arr[insertIndex + 1] = arr[insertIndex];// arr[insertIndex] insertIndex--; } // 当退出while循环时,说明插入的位置找到, insertIndex + 1 if(insertIndex + 1 != i) { arr[insertIndex + 1] = intsertVal; } } } }
结尾
大家都想下,这个应该不难
日常求赞
好了各位,以上就是这篇文章的全部内容了,能看到这里的人呀,都是真粉。
创作不易,各位的支持和认可,就是我创作的最大动力,我们下篇文章见
六脉神剑 | 文 【原创】如果本篇博客有任何错误,请批评指教,不胜感激 ! **