PHP的四种基本排序算法示例

许多人说,该算法的核心是程序,程序的质量是通过算法的好坏决定的。作为一个主要的PHPer,虽然有点接触算法的东西。但仍应掌握基本排序算法。本文介绍了四种基本算法:冒泡排序、插入排序、选择排序、快速排序和算法思想。

前提:采用冒泡排序法、快速排序法、排序法和插入排序法对下数组中的值从小到大排序。


$ ARR(1,43,54,62,21,66,32,78,36,76,39);


1。冒泡排序

思路分析:在一组数进行排序,为当前未完成的序列中,相邻的两个数进行比较,在过去的调整,使大量下沉和较小的那一个就上去了,当两相邻的数进行比较,发现他们的排序是排序的要求,相反,他们互换。

代码实现:


$ ARR =阵列(1,43,54,62,21,66,32,78,36,76,39);
冒泡排序($ ARR)功能
{
$ len =计数($ ARR);
此层循环控制需要气泡的个数。
($ i = 1;$ i;
{此层用于控制每个周期的循环数。
(= 0美元;
{
如果($ ARR { $ K } > $ ARR { $ K + 1 })
{
TMP =美元美元ARR { $ K + 1 };
$ ARR { $ K + 1 } = { } $ K $ ARR;
ARR { } = K美元美元美元的TMP;
}
}
}
返回的数组;
}





2。选择排序

思想分析:在一组要排序的数字中,用第一个位置的数目选择和交换最小的数字,然后在第二个位置数之间交换剩余数字中最少的数字,以便比较倒数的第二个和最后一个数。

代码实现:


功能选择排序($ ARR){
双圈,外轮控制号,比较内部控制数。
$ len =计数($ ARR);
为($我= 0;美元美元美元我<< len-1;i++){
第一个缺省位置
美元=我;
对于($ = $ i + 1;$ J $;
/ / $ ARR { $ P }是目前已知的最小
如果($ ARR { $ P } > $ ARR { $ J }){
比较,查找更小,记录最小值的位置,以及下一次比较比较已知的最小值。
美元= J;
}
}
/ /最小电流的位置已经确定,保存到p.if美元的最小值的位置是从不同的位置我目前的假设,位置可以互换。
如果(P!= $ i){
TMP =美元美元ARR { $ P };
ARR { } = P美元美元美元美元ARR {我};
ARR {我} =美元美元美元的TMP;
}
}
返回最终结果
返回的数组;
}



三.插入排序

思维分析:在一组要排序的数字中,假设前面的数已经是有序的,现在我们需要在前面的序数中插入第一个n个数,这样n个数也就很好了。

代码实现:


函数插入排序($ ARR){
$ len =计数($ ARR);
($ i = 1,$ i $;
TMP =美元美元美元ARR {我};
内部循环控制和插入
为(J = $ i-1;J > = 0;J—){
如果($ TMP < $ ARR { $ J }){
发现插入的元素应该是小的,交换位置后,会回到前面的元素和元素的交换中。
$ ARR { $ J + 1 } = {,} ARR美元美元;
ARR { } =美元美元美元,TMP;
{人}
如果不需要移动元素,因为它已经排序了数组,那么前面的就不需要进行比较了。
打破;
}
}
}
返回的数组;
}



4。快速排序

思路分析:选择一个参考元素,通常选择第一个元素或最后一个元素。通过扫描,待序列分为两个部分,一部分小于基准元件和部分大于参考元素。在这一点上,参考元素是在正确的位置后,其序列排列顺序,然后递归排序方法的两部分的划分。

代码实现:


功能快速排序($ ARR){
首先确定是否继续
美元($ ARR)长度=计数;
如果(长度< = 1){
返回的数组;
}
选择第一个元素作为参考
base_num美元= $ ARR { 0 };
除了所有的元素以外的刻度/遍历,根据大小关系分成两个数组。
初始化数组
left_array美元=(阵列); / /低于基准
right_array美元=(阵列); / /大于基准
($ i = 1;$ i $ $长度;$ + +){
如果($美元base_num > ARR { $我}){
在数组的左侧
left_array美元{ } = {我} ARR美元美元;
{人}
在右边
right_array美元{ } = {我} ARR美元美元;
}
}
将数组的左和右分别以相同的方式递归调用此函数。
left_array = quick_sort美元(美元left_array);
right_array = quick_sort美元(美元right_array);
合并
返回array_merge($ left_array,阵列($ base_num),right_array美元);
}