插入排序

来源:互联网 发布:淘宝店仓库在哪里 编辑:程序博客网 时间:2024/06/06 12:36
    从第一个元素开始,该元素可以认为已经被排序    取出下一个元素,在已经排序的元素序列中从后向前扫描    如果该元素(已排序)大于新元素,将该元素移到下一位置    重复步骤3,直到找到已排序的元素小于或者等于新元素的位置    将新元素插入到下一位置中    重复步骤2        function insert_sort($arr){        $count = count($arr);        for($i=1; $i<$count; $i++){            $tmp = $arr[$i];            $j = $i - 1;            while($arr[$j] > $tmp){                $arr[$j+1] = $arr[$j];                $arr[$j] = $tmp;                $j--;            }        }        return $arr;    }    $arr = array(49,38,65,97,76,13,27);    print_r(insert_sort($arr)); 


思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位。$in = 2;$arr = array(1,1,1,3,5,7);$n = count($arr);//如果要插入的数已经最大,直接打印if($arr[$n-1] < $in) {    $arr[$n+1] = $in; print_r($arr);    }for($i=0; $i<$n; $i++) {//找出要插入的位置    if($arr[$i] >= $in){        $t1= $arr[$i];        $arr[$i] = $in;//把后面的数据后移一位        for($j=$i+1; $j<$n+1; $j++) {            $t2 = $arr[$j];            $arr[$j] = $t1;            $t1 = $t2;    }//打印    print_r($arr);    die;    }}


插入排序   (insertion sort)— O(n2)$data = array(6,13,21,99,18,2,25,33,19,84);$nums = count($data)-1;dump( $data );InsertionSort($data,$nums);dump( $data );function InsertionSort(& $arr,$n ){for( $i=1; $i<=$n; $i++ ){   $tmp = $arr[$i];   for( $j = $i; $j>0 && $arr[$j-1]>$tmp; $j-- )   {    $arr[$j] = $arr[$j-1];   }   $arr[$j] = $tmp;}}function dump( $d ){echo '<pre>';print_r($d);echo '</pre>';}

/*【插 入排序(一维数组)】【基本思想】:每次将一个待排序的数据元素,插入到前面已经排好序的数列中的适当位置,使数列依然有序;直到待排序数据元素 全部插入完为止。【示例】:[初始关键字] [49] 38 65 97 76 13 27 49J=2(38) [38 49] 65 97 76 13 27 49J=3(65) [38 49 65] 97 76 13 27 49J=4(97) [38 49 65 97] 76 13 27 49J=5(76) [38 49 65 76 97] 13 27 49J=6(13) [13 38 49 65 76 97] 27 49J=7(27) [13 27 38 49 65 76 97] 49J=8(49) [13 27 38 49 49 65 76 97]*/function insert_sort($arr){$count = count($arr);for($i=1; $i<$count; $i++){    $tmp = $arr[$i];    $j = $i - 1;    while($arr[$j] > $tmp){      $arr[$j+1] = $arr[$j];      $arr[$j] = $tmp;      $j--;    }}return $arr;}



0 0