对插入排序的理解

    xiaoxiao2021-03-25  57

    一、插入排序的算法思路

    对于待排序的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循环来判断比较插入值之前的数据大小, 一直移动到比插入值还小的位置处结束, 最后把这个数据值插入进去。
    转载请注明原文地址: https://ju.6miu.com/read-39487.html

    最新回复(0)