插入排序、

  • 插入排序是将要排序的数组,分成两部分。一部分为有序,一部分为无序(待排序的数组)。
    默认有序中有一个元素(因为只有一个元素,随便怎么放都是有序的),则无序中的元素有-1个。
  • 先从有序的第一个 元素与 无序最后一个比较 若无序的第一个比有序的最后一个大则直接插入该入后面,否则进行寻找
    若无序的第一个比有序的最后一个小则则往有序在前一个寻找或把整个有序寻找完(数组的索引为-1则表示寻找完毕)
  • 若要进行排序的数组是 int[] array=new int[]{101,34 ,119, 1}; 有序101,无序34 119 1
第一个元素的插入过程
int[] array=new int[]{101,34 ,119, 1}; 
// 有序101           无序 34 119 1
//保存待插入的数据和相关索引
		int  temp=array[1]//待插入数的请一个索引 ;  有序最后一个数。
		int  index=1-1//  进行比较
//  index>=0 保证了数组下标不越界
//  temp<array[index] 若待插入的数比寻找的位置小则不是该位置,  (从小到大进行排序)
		while(index>=0&& temp<array[index]){
				//  将索引指向的数进行重新赋值,  前一个数赋值给后一个数
				array[index+1]=array[index]
				// 记录有序的索引 ,指向下一个元素在进行比较
				index--;
		}
		//遍历结束后的数组101,101 ,119, 1



		// 循环遍历完之后temp>=array[index],index<0
		// index+1 是因为要插入的,在index的前一个,array[index]=array[index+1]前一个数,覆盖后一个数,有两个相同的数组,待插入的数已经保存到temp里,所以只要插入索引的前一个数
		array[index+1]=temp;
		//进行插入操作后,34 ,101,119,, 1
		
第二个元素的插入过程
int[] array=new int[]{101,34 ,119, 1}; 

		int  temp=array[2]//待插入数的请一个索引 ;  有序最后一个数。
		int  index=2-1while(index>=0&& temp<array[index]){
				//  将索引指向的数进行重新赋值,  前一个数赋值给后一个数
				array[index+1]=array[index]
				// 记录有序的索引 ,指向下一个元素在进行比较
				index--;
		}
	
		array[index+1]=temp;
		//进行插入操作后
		//进行插入操作后,34 ,101,119,, 1
一个循环
//array.length不需要减一  ,因为已经越过一个元素进行排序了  默认 array【0】 ,有序
		for(int i=1;i<array.length;i++){
			int[] array=new int[]{101,34 ,119, 1}; 

		int  temp=array[i]//待插入数的请一个索引 ;  有序最后一个数。
		int  index=i-1while(index>=0&& temp<array[index]){
				//  将索引指向的数进行重新赋值,  前一个数赋值给后一个数
				array[index+1]=array[index]
				// 记录有序的索引 ,指向下一个元素在进行比较
				index--;
		}
	
		array[index+1]=temp;
	

		}
  • 在寻找合适的位置是temp<array[index]使用这个条件进行判断,即若待插入数 比当的数组下标的索引小,则该位置不是我们要寻找的数,则对索引的请一个数进行赋值,array【i+1】=array【i】,因为待插入的数在array【i+1】前面,(相当于将array【i】上的元素往后一位),最后index–; 找下一个数。
  • 直到temp>=array[index] ,则表示找到了,索引待插入数 应该插入 index索引的后一一个位置 (从小到大)array【index+1】=temp
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值