[排序] -- 插入排序
来源:互联网 发布:windows snmp 监控dhcp 编辑:程序博客网 时间:2024/05/29 02:04
插入排序的逻辑:
假设Array A
为已经排序好的数组,此时需要从Array B
中抽取最靠前的元素插入到Array A
中,且需要按顺序插入。
变形:
如果只有Array A
,而不存在Array B
。现在对Array A
自己进行插入排序。可以默认认为Array A
中的前半段为已排序好的数组,后半段为未排序数组,而元素K
为目前正要进行排序的元素。此时前半段可以表示为A[0-(k-1)]
,后半段为A[(k+1)-(n-1)]
,n
为数组长度
<?php$a = array(5,2,4,6,1,3);$b = array(31,41,59,26,41,48);function insertionSortAsc($a = array()){ $length = count($a); for ($j = 1; $j < $length; $j++) { $current = $a[$j]; $i = $j - 1;//从原有序deck中最后一位开始比较,从右向左 while ($i >= 0 && $a[$i] > $current) { $a[$i + 1] = $a[$i];//将数字向左移动一位 $i--; } $a[$i + 1] = $current; } return $a;}function insertionSortDesc($a = array()){ $length = count($a); for ($j = 1; $j < $length; $j++) { $current = $a[$j]; $i = $j - 1; while($i >= 0 && $a[$i] < $current) { $a[$i + 1] = $a[$i];//将数字向左移动一位 $i--; } $a[$i + 1] = $current; } return $a;}print_r(insertionSortAsc($a));print_r(insertionSortDesc($b));
输出结果:
0 0