鸡尾酒排序Cocktail Sort的PHP实现
01 | set_time_limit(1); |
02 | function out_arr( $arr ) { |
03 | return implode( ', ' , $arr ).' |
04 | '; |
05 | } |
06 |
07 | function swap(& $a , & $b ) { |
08 | $tmp = $a ; |
09 | $a = $b ; |
10 | $b = $tmp ; |
11 | } |
12 |
13 | function sort_cocktail( $arr ) { |
14 | $change = true; |
15 | $i = 0; |
16 | while ( $change == true) { |
17 | $change = FALSE; |
18 | for ( $j = 0; $j < count ( $arr ) - 1; $j ++ ) { |
19 | if ( $arr [ $j ] > $arr [ $j +1] ) { |
20 | $tmp = $arr [ $j ]; |
21 | $arr [ $j ] = $arr [ $j + 1]; |
22 | $arr [ $j + 1] = $tmp ; |
23 | $change = true; |
24 | } |
25 | } |
26 | |
27 | for ( $j = count ( $arr ) - 1; $j > 0 ; $j -- ) { |
28 | if ( $arr [ $j ] < $arr [ $j -1] ) { |
29 | $tmp = $arr [ $j ]; |
30 | $arr [ $j ] = $arr [ $j -1]; |
31 | $arr [ $j -1] = $tmp ; |
32 | $change = true; |
33 | } |
34 | } |
35 | $i ++; |
36 | echo sprintf( '%3d' , $i ). ' : ' .out_arr( $arr ); |
37 | } |
38 | } |
39 |
40 | echo '<pre>' ; |
41 | $arr = range(1, 20); |
42 | shuffle( $arr ); |
43 | echo 'ORG : ' .out_arr( $arr ); |
44 | $arr = sort_cocktail( $arr ); |
45 | echo '</pre>' ; |