關於常用到的幾個排序,php的實現
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
|
<?php $arr = array (20,4,2,-1,-34,0,50,6,19);
#氣泡排序 function bubbleSort( $arr ){
$flag = 0;
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 +1];
$arr [ $j +1] = $arr [ $j ];
$arr [ $j ] = $temp ;
$flag = 1;
} } //優化 if (! $flag ){
//已經有序 break ;
} $flag =0;
} return $arr ;
} echo implode( `,` ,bubbleSort( $arr )). `<br>` ;
#選擇排序 function selectSort( $arr ){
for ( $i =0; $i < count ( $arr )-1; $i ++){
//假設$i就是最小的 $minVal = $arr [ $i ];
//$i是最小的下標 $minIndex = $i ;
for ( $j = $i +1; $j < count ( $arr ); $j ++){
//假設錯誤 if ( $minVal > $arr [ $j ]){
$minVal = $arr [ $j ];
$minIndex = $j ;
} } //最後交換 $temp = $arr [ $i ];
$arr [ $i ] = $arr [ $minIndex ];
$arr [ $minIndex ] = $temp ;
} return $arr ;
} echo implode( `,` ,selectSort( $arr )). `<br>` ;
#插入排序 function insertSort( $arr ){
//先預設下標為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 --;
} //插入 $arr [ $insertIndex +1] = $insertVal ;
} return $arr ;
} echo implode( `,` ,insertSort( $arr )). `<br>` ;
#快速排序(遞迴) function quickSort( $left , $right ,& $arr ){
$l = $left ;
$r = $right ;
$pivot = $arr [( $left + $right )/2];
$temp =0;
while ( $l < $r ){
while ( $arr [ $l ]< $pivot ) $l ++;
while ( $arr [ $r ]> $pivot ) $r --;
if ( $l >= $r ) break ;
$temp = $arr [ $l ];
$arr [ $l ]= $arr [ $r ];
$arr [ $r ]= $temp ;
if ( $arr [ $l ]== $pivot )-- $r ;
if ( $arr [ $r ]== $pivot )++ $l ;
} if ( $l == $r ){
$l ++;
$r --;
} if ( $left < $r ) quickSort( $left , $r , $arr );
if ( $right > $l )quickSort( $l , $right , $arr );
//return $arr; } quickSort(0, count ( $arr )-1, $arr );
echo implode( `,` , $arr ). `<br>` ;
#二分查詢 function binarySearch(& $arr , $findVal , $l , $r ){
//停止條件 if ( $l > $r ){
return ;
} //找到中間的下標 $midIndex = round (( $r + $l )/2);
if ( $findVal > $arr [ $midIndex ]){
binarySearch( $arr , $findVal , $midIndex +1, $r );
} elseif ( $findVal < $arr [ $midIndex ]){
binarySearch( $arr , $findVal , $l , $midIndex -1);
} else {
echo $midIndex ;
} } binarySearch( $arr ,0,0, count ( $arr )-1);
|
都已經親自測試過,可以正常執行!
本文轉自shayang8851CTO部落格,原文連結:http://blog.51cto.com/janephp/1287597,如需轉載請自行聯絡原作者
相關文章
- 面試常問的幾個排序和查詢演算法,PHP 實現面試排序演算法PHP
- 關於singleton的幾個實現
- 關於ImageView的幾個常見問題View
- 關於二叉樹的幾個必須掌握的實現二叉樹
- 常見演算法 PHP 實現 -- 堆排序演算法PHP排序
- iOS實現幾種會用到的加密方式iOS加密
- 關於PHP的十大誤解 你中了幾個?PHP
- python3實現幾種常見的排序演算法Python排序演算法
- 經常提及的幾個js排序方法(氣泡排序、選擇排序、計數排序)JS排序
- 關於shutdown的幾個模式模式
- 最近積累的幾個關於 PHP 類與 MySQL 的小問題PHPMySql
- 堆排序(php實現)排序PHP
- php實現 歸併排序,快速排序PHP排序
- 中科三方:關於SSL證書的幾個常見誤區
- 基於 SplPriorityQueue 實現的排序方法排序
- Haskell常見排序演算法的實現Haskell排序演算法
- awr報表中用到的幾個SQLSQL
- Authorization Value 用到的幾個字元:冒號字元
- 關於python單例的常用幾種實現方法Python單例
- 關於《給部落格園的幾點現實建議》
- 開發中用到的一個快速排序法排序
- 關於INLIST ITERATOR的幾個測試
- 關於PingFederate用到的證書
- oracle實驗記錄 關於記憶體的幾個viewOracle記憶體View
- 關於介面實現的一個小問題
- php實現 氣泡排序,插入排序,選擇排序PHP排序
- 關於Shell 的幾個冷門資料
- 關於執行緒的幾個函式執行緒函式
- 關於解決問題的幾個段位
- 關於大資料的幾個小故事大資料
- 關於redo的幾個小知識點
- 關於字串的幾個有用函式 (轉)字串函式
- 關於字串分類抽取的幾個方法字串
- 幾種常用的排序演算法之JavaScript實現排序演算法JavaScript
- 幾種排序演算法的原理以及 Java 實現排序演算法Java
- android 幾個經常用到的字串的擷取Android字串
- 實現秒殺的幾個想法
- php常用到的例子PHP