详细注释------插入排序

三口一头猪

插入排序

//外层循环控制排序的趟数,只是有的趟时不需要移动数据的。
for(int i = 1; i < arr.length ; i++) {//i从1开始时认为arr[0]是有序的
	
	//arr[i]是无序区间的起点,小于i的部分认为是有序的(i的作用是 : 1.区分有序区间和无序区间,2.控制循环趟数)
	int value = arr[i];
	int j=i-1;//j是有可能插入的位置
	
	//第二层循环是从需要插入的数据的位置,往前循环,目的是寻找插入位置,把这个数据提出来,然后其他的集体后移
	
	//我们只知道需要当前这个数是小的,比value小,要往前插入,但是不知道插在哪里,所以要往前寻找,在没找到的时候将数据后移,找到后退出循环
	
	//但是不知道要移动多少位,要比较才知道,所以往前边比较边循环,直到找到插入位置,退出循环,将数据插入
	for(; j >= 0; j--) {//一定要有==0 ,不然不能移动第一个元素
		if(arr[j] > value) {
		
		//往后移动
			arr[j+1] = arr[j];//第一次执行时,arr[i]已经变了,所以一定要存为value
		}
		else {
			break;
		}
	}
	//退出循环的位置,就是合适的位置
	arr[j+1] = value;//不需要的移动的位置,也就是插入位置
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值