一: 原理
二: 举例说明
三: 插入排序步骤
四: PHP代码实现插入排序
插入排序(Insertion Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。
原始数组: 10 9 5 12 1 默认10已经被排序,称为有序区,9,5,12,1未排序,成为无序区
第一次排序: 9 10 5 12 1 取出无序区第一个元素10,在有序区元素序列中从后往前面扫描,如果该元素(已排序的10)大于 新元素9,则10移动下一个位置,新元素9占据10的位置
第二次排序: 5 9 10 12 1 取出5跟10比较,10往后移一个位置;再用5跟9比较,9后移一个位置,5占据元素9的位置
第三次排序: 5 9 10 12 1
第四次排序: 1 5 9 10 12
1. 从第一个元素开始,该元素可以认为已经被排序,比如上面例子中10;
2. 取出下一个元素,在已经排序的元素序列中从后向前扫描;
3. 如果该元素(已排序)大于新元素,将该元素移到下一位置;
4. 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5. 将新元素插入到该位置中;
6. 重复步骤2;
eg: 比如上例子: 第二次排序时,取出5,在已经排序区9,10中从后向前扫描,第一次比较5和10,10比5大,10移动到下一个位置,然后再把5同9比较,9比5大,9在往后移动一个位置;此时5已经在已排序区第一个位置了,就把5放在这个这个位置,然后循环操作排序;
1.将数组分成两个区域:已排序区域和未排序区域。首先假设数组的第一个元素处于已排序区域,第一个元素之后的所有元素都处于未排序区域。
2. 排序时用到两层循环,第一层循环用于从未排序区域中取出待排序元素,并逐步缩小未排序区域,第二层循环用于从已排序区域中寻找插入位置(即不断地从已排序区域中寻找比待排序元素大的元素,然后将较大的已排序区的元素后移,后移的最终结果是已排序区元素的最后一个元素占据, 待排序元素原来的位置,而已排序区中间空出一个位置),最后将待排序元素插入元素后移后留下的空位;
3.实现:
= 0; $j--)
{
/**
* $temp需要插入的元素;
* $arr[$j]需要比较的元素
*/
if($arr[$j] > $temp)
{
/**
* 发现插入的元素要小,交换位置
* 将后边的元素与前面的元素互换
*/
$arr[$j+1] = $arr[$j];
//将前面的数设置为当前需要交换的数
$arr[$j] = $temp;
}
else
{
/**
* 如果碰到不需要移动的元素
* 由于是已经排序好是数组,则前面的就不需要再次比较了。
*/
break;
}
}
}
//将这个元素 插入到已经排序好的序列内,返回
return $arr;
}
//调用插入排序实现元素排序
$arr = array(1,100,121,99,12);
insertSort($arr);
print_r($arr);
?>