php四排序-選擇排序


  上接冒泡排序

二、選擇排序

  原理: 在一列數字中,選出最小數與第一個位置的數交換。然后在剩下的數當中再找最小的與第二個位置的數交換,如此循環到倒數第二個數和最后一個數比較為止。(以下都是升序排列,即從小到大排列)

  舉例說明: $arr = array(6, 3, 8, 2, 9, 1);

  第一輪:

   第一次比較, 第一個數 6 與(3,  8,  2,  9,  1)中 3 比較,6大,當前最小數為3,位置為 1

   第二次比較, 最小數字 3 與(3,  8,  2,  9,  1)中 8 比較,3小,當前最小數為3,位置為 1

   第三次比較, 最小數字 3 與(3,  8,  2,  9,  1)中 2 比較,3大,當前最小數為2,位置為 3

   第四次比較, 最小數字 2 與(3,  8,  2,  9,  1)中 9 比較,2小,當前最小數為2,位置為 3

   第五次比較, 最小數字 2 與(3,  8,  2,  9,  1)中 1 比較,2大,當前最小數為1,位置為 5

     第一輪比較完成后,確定最小數為1,小於第一個數6,交換位置上的數,交換后結果為 1  3  8  2  9  6

     總結:第一輪比較,可以確定第一個位置的最小值。

 

 

   第二輪:

   第一次比較, 3與(8, 2,  9,  6)中 8 比較,3小,當前最小數為3,位置為 1

   第二次比較, 3與(8, 2,  9,  6)中 2 比較,3大,當前最小數為2,位置為 3

     第三次比較, 2與(8, 2,  9,  6)中 9 比較,2小,當前最小數為2,位置為 3

     第四次比較, 2與(8, 2,  9,  6)中 6 比較,2小,當前最小數為2,位置為 3

    第二輪比較完成后,確定最小數為2,小於第二個數3,交換位置上的數,交換后結果為 1  2  8  3  9  6

  總結:第二輪比較,可以確定第二個位置的最小值。至此確定了前兩個位置上的數。

 

 

    第三輪:

      第一次比較, 8與( 3,  9,  6)中 3 比較,8大,當前最小數為3,位置為3

    第二次比較, 3與( 3,  9,  6)中 9 比較,3小,當前最小數為3,位置為3

      第三次比較, 6與( 3,  9,  6)中 6 比較,3小,當前最小數為3,位置為3

    第三輪比較完成后,確定最小數為3,小於第三個數8,交換位置上的數,交換后結果為 1  2  3  8  9  6

  總結:第三輪比較,可以確定第三個位置的最小值。至此確定了前三個位置上的數。

 

 

     第四輪:

     第一次比較, 8與( 9,  6)中 9 比較,8小,當前最小數為8,位置為3

     第二次比較, 8與( 9,  6)中 6 比較,8大,當前最小數為6,位置為5

     第四輪比較完成后,確定最小數為6,小於第四個數8交換位置上的數,交換后結果為 1  2  3  6  9  8

  總結:第四輪比較,可以確定第四個個位置的最小值。至此確定了前四個位置上的數。

 

    第五輪:

     第一次比較, 9與 8 比較,9大,當前最小數為8,位置為5

        第五輪比較完成后,確定最小數為8,小於第五個數9,交換位置上的數,交換后結果為 1  2  3  6  8  9

  總結:第五輪比較,可以確定第五個個位置的最小值。至此確定了前5個位置上的數。

 

  綜合以上五輪比較,每一輪比較都可以確定一個位置,對於N個數,比較N-1輪可以確定N個位置上的數,因為確定了N-1個位置,最后一個位置也就確定了代碼如下:

<?php
     
     function order($arr){
      //定義中間變量
      $temp = 0;
       $count = count($arr);
       for($i=0; $i<$count-1; $i++){
          //定義最小位置
           $minIndex = $i;
          for($j= $i+1; $j<$count; $j++){
             if($arr[$j] < $arr[$minIndex]){
                 $minIndex = $j;
             }
         }
         if($i != $minIndex){
               $temp = $arr[$i];
               $arr[$i] = $arr[$minIndex];
               $arr[$minIndex] = $temp;
               
        }
     }
      return $arr;

    }   
$arr = array(6, 3, 8, 2, 9, 1);     
$res = order($arr);
var_dump($res );

 

 

 

 

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM