java 实现插入排序

思路

插入排序将要排序的数据分为有序区和无序区
不断的从无序区取数插入到有序区,直到所有排序完毕
如:

3,-1,9,10,-2,5,1,8
第一轮	3 |-1,9,10,-2,5,1,8
第二轮	-13|9,10,-2,5,1,8
第三轮	-139|10,-2,5,1,8
第四轮	-13910|-2518
第五轮	-2-13910|518
第六轮	-2-135910|18
第七轮	-2-1135910|8
第八轮	-2-11358910|

代码实现:

public static void main(String[] args) {
		 int[] array= {3,-1,9,10,-2,5,1,8};
		 for(int i=1;i<array.length;i++) {
			 int insertval = array[i];
			 int insertindex = i-1;
			 
			 while(insertindex>=0&&insertval<array[insertindex]) {
				 array[insertindex+1] = array[insertindex];
				 insertindex--;
			 }
			 array[insertindex+1] = insertval;
		 }
		 System.out.println(Arrays.toString(array));
	}

第二次后插入的三种情况

第一种 (插入的比有序区都要大)

-13|8
判断insertval<array[insertindex]false
-138|

第二种(插入的比有序区要小)

38|-1
------
insertval = -1
insertindex = 1
388
insertindex --
insertindex = 0
-1<3
338
insertindex--=-1<0
array[insertindex+1] = insertval
-1,3,8

第三种(插入的在有序区之间)

-18|3
insertval = 3
insertindex = 1
第一轮后
-188
insertindex-- 
insertindex  = 0
insertval<array[insertindex] = false
跳出循环
array【insertindex+1= insertval
-138
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值