插入排序实现--图解/实例/java/php

插入排序

在一个有序的数组中,插入新的数据,实现这种的操作就是插入排序

概念

  • 原理:从第一个元素开始,左边视为已排序数组,右边视为待排序数组,从左往右依次取元素,插入左侧已排序数组,对插入新元素的左侧数组重新生成有序数组
  • 需要注意的是,在往有序数组插入一个新元素的过程中,我们可以采用按顺序循环比较,也可以通过折半查找法来找到新元素的位置,两种方式的效率取决于数组的数据量

最坏时间复杂度O(n^2)
最好时间复杂度O(n)
平均时间复杂度O(n^2)

  • 插入排序是一种稳定排序算法

图解

以初始数组 = {2,5,1,3,6}为例,对其排序得到一个升序数组
在这里插入图片描述

  1. 左侧数组为{2},插入新元素5,5与2比较,不交换位置
    在这里插入图片描述
  2. 继续插入1,先和5比较,小于5交换位置,再与2比较,交换位置
    在这里插入图片描述
  3. 插入3,3小于5但大于2,因此与5交换位置
    在这里插入图片描述
  4. 最终插入6,6大于5,至此,得到了最终的排序数组

实例

采用简单的顺序比较

Java实现

/**
* java 插入排序升序
*/
public static int[] insertSort(int[] arr)
{
	if (arr.length < 2)
		return arr;
		
	for (int i = 1;i < arr.length;i++) {
		for (int j = i;j > 0;j--) {
			if (arr[j-1] > arr[j]) {
				int temp = arr[j];
				arr[j] = arr[j-1];
				arr[j-1] = temp;
			} else {
				break;//插入新的元素
			}
		}
	}

	return arr;
}

PHP实现

/*
* php 插入排序升序
*/
public function insertSort(array $arr)
{
	if (count($arr) < 2)
		return $arr;
		
	for ($i = 1;$i < count($arr);$i++) {
		for ($j = $i;$j > 0;$j--) {
			if ($arr[$j-1] > $arr[$j]) {
				list($arr[$j], $arr[$j-1]) = [$arr[$j-1], $arr[$j]];
			} else {
				break;
			}
		}
	}

	return $arr;
}

采用折半查找法,较为复杂,感兴趣的同学可以百度

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值