经典算法系列之:插入排序

1、前言

算法,在计算机中的地位,就相当于人类大脑的决策中枢系统,哪怕最简单的算法,其精妙的思维方式,都可以让人开启一扇新的视窗。

算法,它不仅仅只是狭义的用来解决计算机科学领域的问题,更是一种“思维方式”。算法思维,是一种深度思考和创造的过程。

算法,只有真正理解了,而不只是所谓的知道,并将应用到生活、工作、学习等各个方面,它将一定使人受益终生。

2、原理推导

插入排序,将数组中的每一个元素与它前面的元素遍历比较,把符合排序条件的元素移到它排序的位置。

给定一组 {9,7,1,5,8,6}的原始无序数组,按照从小到大升序排列,从后往前两两比较。

在这里插入图片描述

#step1

第1个数字和第2个数字开始两两比较,数字 【7】 和 【9】 位置互换,完成第一轮排序。
在这里插入图片描述

#step2

第3个数字和前面第1、2个数字开始比较。
第一次比较【1】小于【9】两个数位置互换结果 {7,1,9,5,8,6}。
第二次比较【1】小于【7】两个数位置互换结果{1,7,9,5,8,6}完成第二轮比较。
在这里插入图片描述

#step3

第4个数字和前面第1,2,3个数字开始比较。
第一次比较【5】小于【9】两个数位置互换结果{1,7,5,9,8,6}。
第二次比较【5】小于【7】两个数位置互换结果{1,5,7,9,8,6}。
第三次比较【5】大于【1】则跳出循环,完成第三轮比较。
在这里插入图片描述

#step4

第5个数字和前面第1,2,3,4个数字开始比较。
第一次比较【8】小于【9】两个数位置互换结果{1,5,7,8,9,6}。
第二次比较【8】大于【7】则跳出循环,完成第二轮比较。
在这里插入图片描述

#step5

第6个数字和前面第1,2,3,4,5个数字开始比较。
第一次比较【6】小于【9】两个数位置互换结果{1,5,7,8,6,9}。
第二次比较【6】小于【8】两个数位置互换结果{1,5,7,6,8,9}。
第三次比较【6】小于【7】两个数位置互换结果{1,5,6,7,8,9}。
第四次比较【6】大于【5】则跳出循环,完成第四轮比较。
在这里插入图片描述

至此,插入排序已经完成。

3、代码示例

# 排序是前提,假设已经是有序数组

public static void insertSort(int array[] ){    
    int j = 0;    

    //外层循环控制总次数    
    for (int i=1;i<array.length;i++){       
        // 将i的值放到临时变量中,待一轮比较结束赋值       
        int temp = array[i];        

        //内层循环控制前后两个数交换的次数        
        for (j=i;j>0;j--){            
            // 正序排列,前一个数大于后一个数,则将前面的数放到后一个数的位置            
            if(array[j-1] >= temp){                
                array[j] = array[j-1];           
            }else{               
                break;            
            }  
    }       

        // 内层循环j--,temp表示数组中后一个数的值交换到前一个位置        
        array[j] = temp;    
    }
}
4、禅定时刻

插入排序,如果后一个数比相邻的前面一个数大,则不需要再与前面其他数值比对,相比冒泡排序大大减少了交换次数,提高排序效率。在部分已经确定的信息基础之上,缩小范围,保证了效率和结果。不变的就是变化,能确定的就是变化。

作者简介
思维的持续,一个真的有思想,不穿格子衬衫的程序员。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值