插入排序、

插入排序、,第1张

  • 插入排序是将要排序的数组,分成两部分。一部分为有序,一部分为无序(待排序的数组)。
    默认有序中有一个元素(因为只有一个元素,随便怎么放都是有序的),则无序中的元素有-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
		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
  • 直到temp>=array[index] ,则表示找到了,索引待插入数 应该插入 index索引的后一一个位置 (从小到大)array【index+1】=temp

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1323985.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-12
下一篇2022-06-12

发表评论

登录后才能评论

评论列表(0条)

    保存