算法杂谈:排序算法

    

一、选择排序

  思路:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完

方式1 方式2
function selectSort($num){ 
    for($i = 0; $i < count($num); $i++){
        for($j = $i + 1; $j < $n; $j++){ 
            if($num[$i] > $num[$j]){ 
                $num[$i] ^= $num[$j];      
                $num[$j] ^= $num[$i];      
                $num[$i] ^= $num[$j];      
            }                              
        }
    } 
    return $num;                           
} 



function selectSort($num){
        for($i = 0; $i < count($num); $i++){
            $k = $i;
            for($j = $i; $j < $n; $j++){
                if($num[$k] > $num[$j]){
                    $k = $j;
                }
            }
            if($i != $k){
                $num[$i] ^= $num[$k];
                $num[$k] ^= $num[$i];
                $num[$i] ^= $num[$k];
            }
        }
        return $num;
}

  执行顺序:

      原始數組:[0]=>4 [1]=>6 [2]=>3 [3]=>5 [4]=>1 [5]=>2

      1次处理:

        交换过程:当i = 0, j= 2时,$num[0] 与 $num[2],产生交换.
             当i = 0, j= 4时,$num[0] 与 $num[4],产生交换.
        结果:[0]=>1 [1]=>6 [2]=>4 [3]=>5 [4]=>3 [5]=>2

      2次处理:
        交换过程:当i = 1, j= 2时,$num[1] 与 $num[2],产生交换.
             当i = 1, j= 4时,$num[1] 与 $num[4],产生交换.
             当i = 1, j= 5时,$num[1] 与 $num[5],产生交换.
        结果:[0]=>1 [1]=>2 [2]=>6 [3]=>5 [4]=>4 [5]=>3

      3次处理:
        交换过程:当i = 2, j= 3时,$num[2] 与 $num[3],产生交换.
             当i = 2, j= 4时,$num[2] 与 $num[4],产生交换.
             当i = 2, j= 5时,$num[2] 与 $num[5],产生交换.
        结果:[0]=>1 [1]=>2 [2]=>3 [3]=>6 [4]=>5 [5]=>4

      4次处理:
        交换过程:当i = 3, j= 4时,$num[3] 与 $num[4],产生交换.
             当i = 3, j= 5时,$num[3] 与 $num[5],产生交换.
        结果:[0]=>1 [1]=>2 [2]=>3 [3]=>4 [4]=>6 [5]=>5

      5次处理:
        交换过程:当i = 4, j= 5时,$num[4] 与 $num[5],产生交换.
        结果:[0]=>1 [1]=>2 [2]=>3 [3]=>4 [4]=>5 [5]=>6

猜你喜欢

转载自www.cnblogs.com/onlycat/p/9002757.html