冒泡排序 PHP代码 for($k = 0; $k < $len-1-$i; ++$k){ 为什么要-$i 求解?

2016-01-20 2:02 pm
<?php
$arr2 = array( 5, 15, 3, 4, 9, 11);
$len = count($arr2);
//1, 需要進行n-1趟的「冒泡」比較過程。
echo "<br />排序之前:";
print_r($arr2);
for($i = 0; $i < $len-1; ++$i){ //設定比較的趟數
//2, 每一趟的比較都前一趟少比一次,第一趟需要比較n-1次
for($k = 0; $k < $len-1-$i; ++$k){ //設定本趟比較的次數
//這裡要實現下標為$k和下標為$k+1這兩項的比較:
if($arr2[$k] > $arr2[$k+1]){
$temp = $arr2[$k];
$arr2[$k] = $arr2[$k+1];
$arr2[$k+1] = $temp;
}
}
}
echo "<br />排序之後:";
print_r($arr2);
?>

求大神解答

for($i = 0; $i < $len-1; ++$i){

for($k = 0; $k < $len-1-$i; ++$k){

為什麼要-$i

$i = 0.1.2.3.4 共5趟

for($k = 0; $k < $len-1-$i; ++$k){

for($k = 0; 0< 6-1-0 ++$k){

for($k = 1; 1 < 6-1-1; ++$k){

for($k = 2; 2 < 6-1-2; ++$k){

for($k = 3; 3 < 6-1-3; ++$k){ //條件就不符合了

for($k = 4; 4 < 6-1-4; ++$k){ //條件就不符合了

為什麼這樣不會出錯

反而改成下面這樣就不對

for($k = 0; $k <= $len-1-$i; ++$k){

我實在不懂這個 -$i

拜託大神詳細解說

讓我能看的懂

回答 (2)

2016-01-22 9:31 pm
妳的程式不正確又複雜。

試這個



$numbers = array(5, 15, 3, 4, 9, 11);
$length = count($numbers);
for ($i = 0; $i < $length - 1; $i++) { // 從 0 開始至最尾二
// 從 $i + 1 開始至最尾 (++$j 未行先加所以就等於 $i + 1, 因為迴轉之後最頭個個一定是順序, 所以唔再比較。
for ($j = $i; $j < $length; ++$j) {
if ($numbers[$i] > $numbers[$j]) {
$t = $numbers[$i];
$numbers[$i] = $numbers[$j];
$numbers[$j] = $t;
}
}
}
2016-01-21 1:37 pm
其實可以改成
for($i = 1; $i < $len; ++$i){

for($k = 0; $k < $len-$i; ++$k){
其中i代表要排的回合數
例如,3個數字要排2回合,2個數字排1回合(個數少一回合)
至於為什麼可以回合比對的數字遞減,是因為每回合可以把一個極值丟到最後面
因此在下一回合就不需要比對最後一個值(因為他不會更改位置)


收錄日期: 2021-05-04 02:10:26
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20160120060200AA8n1tD

檢視 Wayback Machine 備份