对插入排序的理解

一、插入排序的算法思路

对于待排序的n个记录(R1,  R2,  R3 ,`````,Rn ),假设第一个记录R1 有序, 然后从第二个记录R2 开始依次将其插入到前面的有序序列中。

二、java代码

public class InsertSort{
    public static void sort(long[] array){
        long temp;
        for(int i=1;i
     
     
      
      0&&array[j-1])>temp){
                array[j]=array[j-1];//数据整体后移
                j--;
            }
            array[j]=temp;//一直移动到比temp值小为止,数据插入
        }
    }
}
     
     

二、代码的理解


1、 for 循环控制的是假定的插入值 ,因此根据算法思路,i 的初始值为1。

把下标为i 的数据存入临时变量temp中,遍历数组内除第一个数据外的全部数据。

2、 while循环用来判断比较 假定的插入值(temp) 与前面数据的大小。
        判断区域是变量 i 之前的数据区。 
        变量 j  是用来比较 ,变量 i 之前数据区内是否有比temp值还大的数据。

若前面的数据比temp大,则让前面的数据整体后移;
最后所有比temp大的数据都向后移,
那么前面下标为 j 的位置就是插入点,
接着让temp插入到 j 位置;
那么temp就插入到了比它大的数据的前面。

3、对下图array 数组进行插入排序过程
array
31155220

第一次for 循环,比较区域 {3 , 1} ,temp=1,数据3比temp大,比较结果 {1 ,3 } ;
第二次 for 循环,比较区域 { 1,3 ,15 }, temp=15, 比较结果{1,3 ,15} ;
第三次 for 循环,比较区域 {1,3 ,15 ,5}, temp=5,数据15比temp大,比较结果{1, 3, 5, 15} ;
第四次for 循环,比较区域{1 , 3, 5 ,15 ,2},temp=2,数据3 ,5 ,15 比temp大,比较结果{1 ,2,3 , 5, 15} ;
第五次for 循环,比较区域{ 1,2,3,5,15,20},temp=-1,比较结果{1,2,3,5,15,20}。

三、总结

插入排序就是   假定了数组内第二个位置是一个插入值, 用大循环for来 遍历数组内除第一个位置上数据外的全部数据,
再用while循环来判断比较插入值之前的数据大小, 一直移动到比插入值还小的位置处结束,
最后把这个数据值插入进去。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值