插入排序初识 有啥区别?

本文通过示例代码详细解析了插入排序算法的工作原理。作者通过标记一个位置来确保该位置左侧的数据始终有序,并逐步介绍如何通过内外两层循环实现数据的正确排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        对于冒泡和选择我一看就明白是怎么回事了,但是这个插入排序让我蒙圈了几分钟,再仔细一看,恍然大悟,抓住“局部有序”找到突破口。这就很灵性了,我先不管后面的数据项到底是什么样的,但是我可以在这组数据中标记一个位置,我可以确保,在我的标记位置之前的数据是有序的。talk is cheap show my code!
        

package javal.util.test;

public class InsertSort {
	
	
	//先使局部有序
	public static void insertSort(long[] array) {
		
		int in, out, len=array.length;
		
		for(out = 1; out< len ; out ++) {
			
			long temp = array[out];
			in = out;
			while(in >0  && array[in -1] >= temp) {
				array[in] = array[in -1];
				--in;
			}
			array[in] =temp;
		}
	}
	
	public static void main(String[] args) {
		long[] array = new long[] {2,8,3,5,1,2356,776};
		insertSort(array);
		
		for (long l : array) {
			System.out.println(l);
		}
	}
}
        插入排序的几个注意点:

        1.外层for循环,out变量从1开始,向右移动,它标记了未排序数据的最左端数据。

        2.内层while循环中, in 变量从out变量位置开始,向左移动,直到temp变量小于in所指的数据项,或者直到它不能再左移为止,while 循环每执行一次,都向右移动了一个已排序的数据项。

        ps:上叙程序中 下标为1的 左边的数据肯定是有序的,如果有序的个数更多,那么标记的下标位置也可以变大。那么再看上述程序,其实标记位置也可以为2. 道理显而易见,因为 下标2之前的数据是有序的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值