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

插入排序

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

概念

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

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

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

图解

以初始数组 = {2,5,1,3,6}为例,对其排序得到一个升序数组
插入排序实现--图解/实例/java/php_第1张图片

  1. 左侧数组为{2},插入新元素5,5与2比较,不交换位置
    插入排序实现--图解/实例/java/php_第2张图片
  2. 继续插入1,先和5比较,小于5交换位置,再与2比较,交换位置
    插入排序实现--图解/实例/java/php_第3张图片
  3. 插入3,3小于5但大于2,因此与5交换位置
    插入排序实现--图解/实例/java/php_第4张图片
  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;
}

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

你可能感兴趣的:(算法)