插入排序

PHP代码如下:

<?php
/*
 *算法:插入排序
 *算法思想:
 *    
 *    1.数组A的最后元素A[$j],令$i = $j -1,A[$i]
 *    2.第A[$i]个与A[$j]比较,如果A[$j] < A[$i],它们的值交换。
 *    3.它们的值都减少1,然后返回步骤1 
 *    4. 从第二个元素开始排序,每次比较到第一个元素时停止
 *    5. 最后一个元素与前面的排序完成后,算法结束
 *算法复杂度:
 *    n(n+1)/2
 */
    function insertionSort( $sortarray ) {
	    $count = count( $sortarray );
		for( $j = 1; $j < $count; $j++ )
		{
		    $key = $sortarray[$j];
			$i = $j -1;
			while( $i >= 0 and $key < $sortarray[$i] )
			{
			    $sortarray[$i+1] = $sortarray[$i];
				$i--;
				$sortarray[$i+1] = $key;
			}
		}
		return $sortarray;
	}
	
	$testArray = array('2','4','8','3','9','1','5','7','0','6');
	$result = insertionSort($testArray);
	var_dump($result);
?>

插入排序的策略:

    从前面开始,每次都与前一个对比,如果符合要求则进行交换位置,如果不符合继续往前对比,直到第一个为止

插入排序的步骤:

    取元素:从前面开始取值,一次往后取值

    对比:取出的值与前面值的对比

   交换:如果满足要求则交换值,不满足则继续往前对比,直到第一个

伪代码如下:

INSERTION-SORT(A)
1  for j ← 2 to length[A]
2       do key ← A[j]
3          ▹ Insert A[j] into the sorted sequence A[1 ‥ j - 1].
4          i ← j - 1
5          while i > 0 and A[i] > key
6              do A[i + 1] ← A[i]
7                 i ← i - 1
8          A[i + 1] ← key

过程如图所示:


算法分析:

    数组长度为n,从第二个开始取值,一共取了n-1次,每次最差的算法是都进行对比,第二个进行1次对比,第三个进行2次对比,第n个进行n-1对比。

总共的代价就是 1+ 2 + 3 +...+ n = n(n+1)/2;

略低阶项和常量c,即得到结果:Θ(n2).

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值