PHP的四种基本算法:冒泡、选择、插入和快速排序
很多人说算法是程序的核心,一个程序是比差,关键是优点和缺点的程序算法。作为一个主要的PHPer,虽然有点接触算法的东西。但对冒泡排序,插入排序,选择排序,快速排序的四种基本算法,我想还是大师。以下是我自己的理解分析的四种方法。
要求:采用冒泡排序法、快速排序法、排序法和插入排序法对以下数组中的值按小顺序排序。
$ ARR(1,43,54,62,21,66,32,78,36,76,39);

1。冒泡排序法
*思想分析:法律就像它的名字一样,是一个泡沫,每次都从数组中选出最大的一个。
例如:2,4,1 * / /第一次泡出来的是4
2,1,4 / /二*泡出来的是2
2最后变得如此* /

*代码实现:
复制代码代码如下所示:
$ ARR =阵列(1,43,54,62,21,66,32,78,36,76,39);
功能getpao($ 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。选择排序方法:
选择排序方法的想法:每次选择一个对应的元素,然后将其放入指定的位置。
复制代码代码如下所示:
功能select_sort($ ARR){
实现双圆,外轮控制数,电流最小值,内部控制时间比较。
i i当前最小值的位置,需要与比较元素相关
对(我= 0美元美元,len =计数($ ARR);我的<< len-1美元美元美元;i++){
第一个缺省位置
美元=我;
需要将$ j与$ i结尾的元素进行比较。
对于($ = $ i + 1;$ J $;
/ / $ ARR { $ P }是目前已知的最小
如果($ ARR { $ P } > $ ARR { $ J }){
比较,查找较小,记录最小值的位置;在下一个比较中,
应该使用最小值来比较/已知。
美元= J;
}
}
已确定最小电流的位置,保存到$ p。
如果找到最小位置的位置和不同的当前假设,可以进行交换。
如果(P!= $ i){
TMP =美元美元ARR { $ P };
ARR { } = P美元美元美元美元ARR {我};
ARR {我} =美元美元美元的TMP;
}
}
返回最终结果
返回的数组;
}


三.插入排序法
插入排序方法的思想:将要排序的元素插入到被假定为排序号的数组的指定位置。
复制代码代码如下所示:
功能insert_sort($ ARR){
哪一部分已经排序,以区别为好
哪个部分没有排序
找到一个元素排序
这个元素是从第二个元素开始的,最后一个元素是对元素进行排序的需要。
可以标记使用周期。
每次需要插入的元素都被很好地控制时,i/i循环控制每次需要插入的元素。
将间接数组分为2部分,下标小于当前(左),是序列的良好次序。
对(我= 1美元美元,len =计数($ ARR);美元美元美元我< len;i++){
获取当前需要比较元素值的值。
TMP =美元美元美元ARR {我};
内部循环控制和插入
为(J = $ i-1;J > = 0;J—){
/ /美元美元ARR {我}; / /需要插入元素;$ ARR { $ J }; / /需要比较元素
如果($ TMP < $ ARR { $ J }){
发现插入的元素应该很小,交换位置
交换元素前面和后面的元素。
$ ARR { $ J + 1 } = {,} ARR美元美元;
在数字设置为当前需要交换之前的号码。
ARR { } =美元美元美元,TMP;
{人}
如果不需要移动元素
因为它已经被排序是数组,所以前面不需要进行比较。
打破;
}
}
}
这个插入到序列中的元素是否已经排序。
返回
返回的数组;
}


4。快速排序法
复制代码代码如下所示:
功能quick_sort($ ARR){
首先确定是否继续
美元($ ARR)长度=计数;
如果(长度< = 1){
返回的数组;
}
/ /如果没有回报,说明在shuduoyu 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美元);
}