幾種常見的排序
排序是乙個程式設計師的基本功,對於初級phper,更是可以通過排序演算法來鍛鍊自己的思維能力。
所謂排序,就是對一組資料,按照某個順序排列的過程。下面就總結四種常用的php排序演算法,分別是氣泡排序,選擇排序,插入排序以及快速排序。
一,氣泡排序(bubble sort)
在幾種排序中,個人認為氣泡排序相對而言是比較簡單也是非常常用的一種排序方法。
基本思想:如下圖所示,將一組資料看作一排豎著的氣泡,然後讓最後乙個數與倒數第二個數進行比較,大的就往前移。然後用相同的方法,將倒數第二個數與倒數第三個進行比較,大的往前移,依次類推,最後本輪迴圈結束後,第乙個元素就是最大的了,然後繼續迴圈,得到第二個,第三個……
下面給出實現**,已經優化過的氣泡排序
複製**
1
function
bubblesort(&
$arr)15
}16if(
!$flag)21
$flag
=false;22
}23return
$arr;24
}
複製**
細心的人就會發現,我在程式中定義了乙個$flag變數,主要是用來判斷資料是否已經有序,從而優化了氣泡排序演算法。
二,選擇排序(selection sort)
首先,拿第乙個和後面所有的比,找出最小的那個數字,然後和第乙個數互換(當然,如果是第乙個最小,那麼就不用互換了),接著迴圈,即:拿第二個和後面的比較,找出最小的數字,然後和第二個數字互換,依次類推,也就是說每次都是找出剩餘最小的值。
**如下:
複製**
function
selectsort(&
$arr)}
//最後交換
$temp
=$arr[$i
];$arr[$i
]=$arr
[$minindex];
//迴圈外面,不能出現$j
$arr
[$minindex]=
$temp;}
return
$arr
;}
複製**
三 , 插入排序(insert sort)
插入排序的基本思想是:在要排序的一組數中,假設前面的數已經是排好順序的,現在要把第n個數插到前面的有序數中,使得這n個數也是排好順序的。如此反覆迴圈,直到全部排好順序。如下圖所示:
下面貼出**
複製**
1
function
insertsort(&
$arr)12
$arr
[$insertindex+1
]=$insertval;13
}14return
$arr;15
}
複製**
四, 快速排序
基本思想:選擇乙個基準元素,通常選擇第乙個元素或者最後乙個元素。通過一趟掃瞄,將待排序列分成兩部分,一部分比基準元素小,一部分大於等於基準元素。此時基準元素在其排好序後的正確位置,然後再用同樣的方法遞迴地排序劃分的兩部分。
複製**
function
quicksort(&
$arr
)//選擇第乙個元素作為基準
$base_num
=$arr[0
];//遍歷除了標尺外的所有元素,按照大小關係放入兩個陣列內
//初始化兩個陣列
$left_array
=array()
;//小於基準的
$right_array
=array()
;//大於基準的
for($i=
1;$i<
$length;$i
++)else
}//再分別對左邊和右邊的陣列進行相同的排序處理方式遞迴呼叫這個函式
$left_array
=quicksort
($left_array);
$right_array
=quicksort
($right_array);
//合併
return
array_merge
($left_array
,array
($base_num),
$right_array);
}
複製** 常見的四種排序演算法
void bubblesort int a,int size,int order order為1代表公升序,氣泡排序演算法 void selectsort int a,int size,int order order為1代表公升序,選擇排序演算法 if k i void insertsort int...
四種排序演算法PHP實現類
四種排序演算法的php實現 1 插入排序 insertion sort 的基本思想是 每次將乙個待排序的記錄,按其關鍵字大小插入到前面已經排好序的子檔案中的適當位置,直到全部記錄插入完成為止。2 選擇排序 selection sort 的基本思想是 每一趟從待排序的記錄中選出關鍵字最小的記錄,順序放...
PHP實現四種基本排序演算法
許多人都說演算法是程式的核心,演算法的好壞決定了程式的質量。作為乙個初級phper,雖然很少接觸到演算法方面的東西。但是對於基本的排序演算法還是應該掌握的,它是程式開發的必備工具。這裡介紹氣泡排序,插入排序,選擇排序,快速排序四種基本演算法,分析一下演算法的思路。許多人都說演算法是程式的核心,演算法...