算法原理:
将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。
因此,直接插入排序可以用两个循环完成
java:
public static void insertSort(int[] array) {
for (int i = 1, len = array.length; i < len; i++) {
if (array[i] < array[i - 1]) {
int temp = array[i];
int j;
for (j = i - 1; j >= 0 && temp < array[j]; j--) {
array[j + 1] = array[j];
}
array[j + 1] = temp;
}
}
}
php:
//直接插入排序
function insertSort($arr) {
$length = count($arr);
if ($arr < 2) {
return $arr;
}
for ($i = 1; $i < $length; $i++) {
for ($j = 0; $j < $i; $j++) {
if ($arr[$i] > $arr[$j]) {
$temp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $temp;
}
}
}
}
//优化
function insertSort1($arr) {
$length = count($arr);
if ($arr < 2) {
return $arr;
}
for ($i = 1; $i < $length; $i++) {
if ($arr[$i] < $arr[$i - 1]) {
$temp = $arr[$i];
// for ($j = $i - 1; $j >= 0 && $temp < $arr[$j]; $j--) {
// $arr[$j + 1] = $arr[$j];
// }
// $arr[$j + 1] = $temp;
for ($j = $i - 1; $j >= 0; $j--) {
if ($arr[$j] <= $temp) {
break;
}
$arr[$j + 1] = $arr[$j];
}
$arr[$j + 1] = $temp;
}
}
return $arr;
}
function insertSort(&$arr) {
$length = count($arr);
for ($i = 1; $i < $length; $i++) {
//倒序
// if ($arr[$i] > $arr[$i - 1]) {
// 正序
if ($arr[$i] < $arr[$i - 1]) {
$temp = $arr[$i];
for ($j = $i - 1; $j >= 0; $j--) {
//倒序
// if ($arr[$j] > $temp) {
// 正序
if ($arr[$j] < $temp) {
break;
}
$arr[$j + 1] = $arr[$j];
}
$arr[$j + 1] = $temp;
}
}
}