插入排序java

来源:互联网 发布:网络监控数据线连接 编辑:程序博客网 时间:2024/06/04 00:31

学习了一下插入排序,记录一下插入排序的理解

插入排序非常类似于整扑克牌。 

在开始摸牌时,左手是空的,牌面朝下放在桌上。接着,一次从桌上摸起一张牌,并将它插入到左手一把牌中的正确位置上。为了找到这张牌的正确位置,要将它与手中已有的牌从右到左地进行比较。无论什么时候,左手中的牌都是排好序的。

假如数组   2,5,1,6,4

基准值为角标0的值,就是2,每次比较还有一个比较值,就是当前角标的值 temp,一直到角标变为 1和0比较,则结束,

然后从角标1开始递增,角标大的值应该也比角标小的值大,大则不变,小则替换

步骤1 角标1和角标0比较,temp为[1]=5  因为值大于,所以不变,角标不可左移,结束

步骤2 角标2和角标1比较,temp为[1]=1, 2角标比1角标小,所以替换,为2,5,5,角标继续左移变为1和0比较, temp的值小于2,继续替换为,2,2,5,6,4,角标不可左移结束,此刻0角标的位置替换为temp的值1,数组为  1,2,5,6,4

步骤3 角标3和角标2比较, 3大于2,结束因为不可能比左边要小了

步骤4 角标4和角标3比较,temp=4,4j交表的值小于3角标的值,进行替换为,1,2,5,6,6,继续比较 角标3和temp,得到角标3的值大于temp,替换位置,1,2,5,5,6 继续比较发现均大于左边的值,最后替换temp,角标2=temp为4,得到1,2,5,6,4 

//从左向右比较,确定一个比较值for (int i = 1; i < arr.length; i++) {int temp=arr[i];  //当前比较的值,int j=i-1;  //当前需要比较值的前一位,
//当出现什么情况 才需要替换
//当前一位必须大于等于0,意思为比较位 不能为角标0和-1比较
//以及 比较值递减的前一位,必须大于当前比较值,才有比较进行替换
while(j>=0&&arr[j]>temp){arr[j+1]=arr[j];//值替换,比如2,5,1,6,4,出现符合条件的值 5和1,用前一位大的值替换掉小的当前位的值    j--;//比较位左移一位继续比较,比如 步骤3中,6和4比较完以后,还需要用5和4比较}
//比较到不可比较,或者当前值已经大于比较值的时候,比如步骤4,就需要替换了,当前j角标为1,
//但是但是1的值是2,并不比比较值4大,所以结束比较了。同事也替换位置,将角标2的前一位替换为比较值4
//如果最后的值不是4而是0,就会出现j<0的情况。所以j+1=0,就将角标0的位置替换为值0 了
arr[j+1]=temp;}



原创粉丝点击