說明:找到最大的數,排列到最後面,然後繼續找 例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ if($arr[$j]>$arr[$j+1]){ $tem ...
說明:找到最大的數,排列到最後面,然後繼續找 例: $arr = array(3,5,-1,0,2); for($i=0;$i<count($arr)-1;$i++){ for($j=0;$j<count($arr)-1-$i;$j++){ if($arr[$j]>$arr[$j+1]){ $temp = $arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$temp; } } } 理解: 3,5,-1,0,2 //從第一個數開始往後比較,如果比後面的數大則與後面的數調位置 //第一次,3小於5,那麼不變 //第二次,5大於-1,那麼變成 3,-1,5,0,2 //第三次,5大於0 3,-1,0,5,2 //第四次,5大於2 3,-1,0,2,5 至此完成一次內迴圈,此時最後一個數完成排序,下次將不參與 3,-1,0,2,5 第二次外迴圈開始 第一次:3大於-1 -1,3,0,2,5 第二次:3大於0 -1,0,3,2,5 第三次:3大於2 -1,0,2,3,5 至此完成後面兩位數的排序了,接下來類推 -1,0,2,3,5 二、選擇排序法 說明:先假設第一個數就是最小的數,然後將後面的數依次與它比較,如果假設的數不是最小的數,就將它與後面的最小的數調換位置 $arr=array(2,1,-1,3,0); for($i=0;$i<count($arr)-1;$i++){ $minval = $arr[$i]; $minindex = $i; for($j=1+$i;$j<count($arr);$j++){ if($arr[$j]<$minval){ $minval = $arr[$j]; $minindex = $j; } } $temp = $arr[$i]; $arr[$i] = $arr[$minindex]; $arr[$minindex] = $temp; } 理解: 2,1,-1,3,0 //先假設第一個數2為最小值,它後面的數依次與2做比較,尋找到最小的那個數 過程: 1小於2,那麼minval=1 -1小於1,那麼minval=-1 3大於-1,不變 0大於-1,不變 那麼現在就找到了該數組中最小的數了為-1 將-1與2調換位置就完成第一個數的排序了 那麼現在數組變成 -1,1,2,3,0 現在第一個數-1已經為有序,所以不參與比較了,往後面繼續 現在假設minval=1 2大於1,不變 3大於1,不變 0小於1,那麼minval=0 現在一次迴圈完成,調換0與1的位置完成第二個數的排序 那麼現在數組變成 -1,0,2,3,1 //後面的推法與上面相同。。。 三、插入排序法 說明:先假設一個數組中的第一個數為單獨的有序數組,再將後面的一個數與它【這裡隨它I的增長,就變成它們了】做比較,如果後面的數比假設的數還小,則將小的那個數後移,最後將那個數移到最前面 $arr=array(2,1,-1,3,0); for($i=1;$i<count($arr);$i++){ $insertval=$arr[$i]; $insertindex = $i-1; while($insertindex>=0 && $insertval<$arr[$insertindex]){ $arr[$insertindex+1]=$arr[$insertindex]; $insertindex--; } $temp = $arr[$i]; $arr[$insertindex+1]=$insertval; } 理解: 2,1,-1,3,0 //第一次,先保存待插入的數1為insertval,再拿 insertval 與2比較,1小於2,所以把2後移,變成如下的圖 2,2,-1,3,0 //此時2前面沒有數字了,insertindex=0,所以比較完成,那麼將insertval插入到尋找到的這個位置。變成如下圖 1,2,-1,3,0 //此時,1,2變成有序數組 //第二次,先保存待插入的數-1為insertval,再拿insertval與2做比較,-1小於2,所以把2後移,變成如下圖 1,2,2,3,0 //此時,再拿insertval與1做比較,-1小於1,那麼把-1後移,變成如下圖(這就是一個拿待插入數與前面的有序數組比較的過程) 1,1,2,3,0 //此時,insertindex到頭了,所以將insertval插入該位置 -1,1,2,3,0 //後面推法如上