算法原理:

将数组中的所有元素依次跟前面已经排好的元素相比较,如果选择的元素比已排序的元素小,则交换,直到全部元素都比较过。
因此,直接插入排序可以用两个循环完成

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;
        }
    }
}