選擇排序selectSort()
阿新 • • 發佈:2021-07-02
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 // 第四次迴圈結束完成排序