#include
void
print_array
(int
*a,int size)
printf
("\n");
}void
bubblesort
(int
*a,int size)
}print_array
(a, size-i);}
}void
bubblesortenhance
(int
*a,int size)
}print_array
(a, size-i);}
}void
bubblesortsuper
(int
*a,int size)
} h = last;
//把掃瞄一趟最後的一次交換位置變為h
l =0;
//繼續下一趟掃瞄
printf
("l=%d, h=%d last=%d\n"
, l, h, last)
;print_array
(a, h+1)
;}}int
main()
;//printf("\nbubblesort\n");
//bubblesort(a, 8);
printf
("\nbubblesortenhance\n");
bubblesortenhance
(a,8);
return0;
}/*執行結果:
bubblesort
0 3 2 4 1 5 6 7
0 2 3 1 4 5 6
0 2 1 3 4 5
0 1 2 3 4
0 1 2 3
0 1 2
0 1
看上邊的執行結果,交換次數執行過程發現是乙個倒三角形。 執行7趟掃瞄交換。
bubblesortenhance
0 3 2 4 1 5 6 7
0 2 3 1 4 5 6
0 2 1 3 4 5
0 1 2 3 4
0 1 2 3
加上標誌位,執行過程變成了倒梯形。執行5趟掃瞄交換。
bubblesortsuper
l=0, h=5 last=5
0 3 2 4 1 5
l=0, h=4 last=4
0 2 3 1 4
l=0, h=3 last=3
0 2 1 3
l=0, h=2 last=2
0 1 2
l=0, h=0 last=0
0把標誌位替換為上一趟掃瞄的最後一次交換的位置,執行過程變成了倒梯形裡的間接部分。執行4趟掃瞄交換。
*/
bubblesort 演算法的複雜度為o(n2),bubblesortenhance 與 bubblesortsuper 這兩種演算法的複雜度 介於 o(n) 與 o(n2)。
<?php
function
bubblesort($a
)}}print_r
("bubblesort-count=
\n")
;return$a;
}function
bubblesort1($a
)}}print_r
("bubblesort1-count=
\n")
;return$a;
}/**
* 把最後一次發生交換的標誌記錄下來,直到沒有交換標誌了
* 改進版2
*/function
bubblesort2($a
)}}// print_r("bubblesort2-count=\n");
return$a;
}/**
* 把最後一次發生交換的標誌記錄下來,直到沒有交換標誌了
* 改進版3(交換標誌易理解**版)
*/function
bubblesort3($a
)}}// print_r("bubblesort3-count=\n");
return$a;
}/**
* 把最後一次比較的位置記錄下來的優化的冒泡演算法
* 改進版4
*/function
bubblesort4($a
)}$h=
$last
;//下次比較內容僅從上一次發生互動的左邊進行
}// print_r("bubblesort4-count=\n");
return$a;
}$a=[
1,5,
4,6,
9,7,
8];print_r($a
);// $a = bubblesort($a);
// print_r($a);
// $b = bubblesort1($a);
// print_r($b);
// $c = bubblesort2($a);
// print_r($c);
// $d = bubblesort3($a);
// print_r($d);$e=
bubblesort4($a
);print_r($e
);
排序演算法 氣泡排序
一.氣泡排序的過程 公升值排序 1.將第乙個記錄的關鍵字與第二個記錄的關鍵字進行比較,若key 1 key 2 則交換。然後比較第二個與第三個,依此類推,直到第n 1個與第n個比較為止,第一趟排序完後,記錄最大的關鍵字會被排在最後面。2.將記錄的前n 1個關鍵字進行第二趟比較交換,直到前n 1個中最...
排序演算法 氣泡排序
從基礎重新抓起。氣泡排序 每次從陣列頭到尾選出最大或者最小的,排到尾部或者頭部。以排序結果從小到大為例 每次從陣列中把最大的調換到末尾。eg.元素個數 count,需要找count 1次 外迴圈,最後一次不用再做比較了 每次從頭到末尾沒有確定的資料中找最大的 內迴圈 做法就是比較相鄰兩個元素的大小,...
排序演算法 氣泡排序
排序演算法是處理資料最基礎的演算法,掌握各種排序演算法有利以後遇到資料時的處理。首次學習,先學習氣泡排序。氣泡排序原理 對一組待排序資料x1,x2,x3,x4,x5,x6,x7.xn,氣泡排序演算法指標 這裡的指標並不是實際的指標,只是為方便而假象的乙個類似指標的東西 從第乙個資料開始,與其後面的乙...