1. 程式人生 > 其它 >選擇排序selectSort()

選擇排序selectSort()

 1 // 它的工作原理是每一次從待排序的資料元素中選出最小的一個元素(迴圈一圈就會把一個最小的值放在此次迴圈的$i上),將該元素放到該輪的索引位置(該輪的索引指外層迴圈的$i)上,
 2 function SelectSort(array $container)
 3 {
 4     $count = count($container);
 5     for ($i = 0; $i < $count; $i++){
 6         $k = $i;
 7         for ($j = $i + 1; $j < $count; $j++){
 8             if
($container[$j] < $container[$k]){ 9 $k = $j; 10 } 11 } 12 if($k != $i){ 13 $temp = $container[$i]; 14 $container[$i] = $container[$k]; 15 $container[$k] = $temp; 16 } 17 } 18 return $container
; 19 } 20 21 //假設測試這個陣列[45,23,12,55,6]; 22 // 第一次外迴圈 23 $k = $i = 0; 24 $j=$i+1; 25 // 內迴圈第一次 26 $k = 0;$j = 1;$container[$j] = $container[1] = 23; $container[$k] = $container[0] = 45; $k索引上的值大於$j索引上的的值所以此時 $k = $j =1; 27 // 內迴圈第二次 28 $k = 1;$j = 2;$container[$j] = $container[2] = 12; $container[$k] = $container
[1] = 23; $k索引上的值大於$j索引上的的值所以此時 $k = $j =2; 29 // 內迴圈第三次 30 $k = 2;$j = 3;$container[$j] = $container[3] = 55; $container[$k] = $container[2] = 12; $k索引上的值小於$j索引上的的值所以此時 $k沒有進入if判斷中,所以$k還是2; 31 // 內迴圈第四次 32 $k = 2;$j = 4;$container[$j] = $container[4] = 6; $container[$k] = $container[1] = 12; $k索引上的值大於$j索引上的的值所以此時 $k = $j =4; 33 //此時內層迴圈結束,$k=$j=4; 34 因為$k=4;$i=0;不相等,所以$temp = $container[$i] = 45; $container[$i] = $container[$k] = 6; $container[$k] = $temp = 45; 35 此時原陣列變為[6,23,12,55,45],第一輪迴圈將6這個最小值放在迴圈開始的初始位置 36 //第二次外迴圈 37 [6,12,23,55,45] 38 //第三次外迴圈 39 [6,12,23,55,45] 40 //第四次外迴圈 41 [6,12,23,45,55] 42 // 第四次迴圈結束完成排序