PHP插入排序

/**
 * 插入排序
 * 固定首位,把下一个未排序的,与前面有序序列中的元素交换,
 * 当发现前面的那个不大于自身,则不再向前判断,中止本趟,进行下趟判断
 */
function insertionSort($randArr, $length)
{

    for ($i = 1; $i < $length; $i++) {
        //如果当前元素,比前一个元素小,就交换
        for ($j = $i; $j > 0 && $randArr[$j] < $randArr[$j - 1]; $j--) {
            $temp = $randArr[$j];
            $randArr[$j] = $randArr[$j - 1];
            $randArr[$j - 1] = $temp;
        }
    }
    return $randArr;
}

/**
 * 优化点:
 * 内层循环中,用覆盖代替了交换
 * @param $randArr
 * @param $length
 * @return mixed
 */
function insertionSort2($randArr, $length)
{
    for ($i = 1; $i < $length; $i++) {
        //保存本次考查元素,
        $e = $randArr[$i];
        //前面有序元素,若比当前元素大,就覆盖当前元素
        for ($j = $i; $j > 0 && $randArr[$j - 1] > $e; $j--) {
            $randArr[$j] = $randArr[$j - 1];
        }
        //最后,把当前元素 覆盖 它的前一个元素
        $randArr[$j] = $e;
    }
    return $randArr;
}

你可能感兴趣的:(PHP插入排序)