插入排序的java实现,插入排序的原理理解,插入排序平均时间复杂度为什么是O(n^2)。插入排序最坏时间复杂度为什么是O(n^2)。

本文详细介绍了插入排序的工作原理,通过打牌的比喻进行生动解释。并提供了插入排序的Java实现,同时探讨了其在最坏和平均情况下的时间复杂度,均是O(n^2)。分析了最坏情况下每个元素需要与所有已排序元素比较,以及平均情况下每个元素与约一半已排序元素比较的逻辑。

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

1. 插入排序的原理理解:

正如我们打牌时的抽牌方式。我们先把数组分成左右半区。左半区最开始一个数,其余的数为右半区。从右半区一个个拿出数,插入左半区。

2. 插入排序java实现:

	/**从小到大排序
	 * @param list
	 */
	public static void InsertionSort(double[] list) {
	    //从右半区一个个拿出数来插
		for (int i = 1; i < list.length; i++) {
			// 准备插入第i个索引
			double currentElement = list[i];//提取i索引数字,方便k向后挪。
			int k;//左半区的从右向左一个个与i索引比较
			// 当第k个索引比i小的时候(即i比list[k]大),终止循环
			for (k = i - 1; k >= 0 && list[k] > currentElement; k--) {
				// 每一轮,k向后挪一格,空出位置(当然,实际上k索引还存在着数)
				list[k + 1] = list[k];
			}
			//终止循环后下面的k+1即为上一轮的k位置
			//i插入空出的位置
			list[k + 1] = currentElement;
		}
	}

3. 插入排序的最坏情况的时间复杂度和理解:O(n^2)

最坏情况 :右半区每一个数,都和所有左半区的数比较。
第一轮比较1次
第二轮比较2次

第n -1轮比较n - 1次
所以 1 + 2 + 3 + … + ( n - 1 )= O(n^2)

4. 插入排序的平均时间复杂度和理解:O(n^2)

最坏情况是,右半区每一个数,都和所有左半区的数比较。
平均情况是,右半区每一个数,都和一半的左半区的数比较。

平均来说,
第一轮比较1/2次,
第二轮比较2/2次
第三轮比较3/2次,

第n - 1轮比较( n - 1 )/2次,
所以 1/2 + 2/2 + 3/2 + … + ( n - 1 )/2 = O(n^2)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值