PHP 排序算法实现讲解

所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。排序算法,就是如何使得记录按照要求排列的方法。排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。在各个领域中考虑到数据的各种限制和规范,要得到一个符合实际的优秀算法,得经过大量的推理和分析。

分别使用插入排序法,冒泡排序法,选择排序法,快速排序法,将下面数组中的值进行按照从小到大的顺序进行排序操作。

1
$arr(12,43,57,32,51,76,36,91,28,46,40);


1、插入排序法

分析:既定前面数字已经排好顺序,现在要把第n个数字插入到前面有序的数组中,使得这n个数字也是有序的放入其中,如此反复循环直至全部排好顺序。

具体代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$arr(12,43,57,32,51,76,36,91,28,46,40);
functioninsertSort($arr) {
$len=count($arr);
for($i=1,$i<$len;$i++) {
$tmp= $arr[$i];
for($j=$i-1;$j>=0;$j--) {
if($tmp< $arr[$j]) {
//比较大小当数字小时交换位置,将后面的数字与前面的数字进行互换操作
$arr[$j+1] = $arr[$j];
$arr[$j] = $tmp;
}else{
//不需要,直接跳过
break;
}
}
}
return$arr;
}


2、冒泡排序法

分析:从前往后对相邻的两个数字依次进行比较调整,让较大的数字往下沉,让较小的数字往上升,即每相邻的数字进行对比排序,顺序不符合时将其调换位置。

具体代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$arr(12,43,57,32,51,76,36,91,28,46,40);
functionbubbleSort($arr)
{
$len=count($arr);
for($i=1;$i<$len;$i++)
{//循环比较次数
for($k=0;$k<$len-$i;$k++)
{
if($arr[$k]>$arr[$k+1])
{
$tmp=$arr[$k+1];
$arr[$k+1]=$arr[$k];
$arr[$k]=$tmp;
}
}
}
return$arr;
}


3、选择排序法

分析:选出最小的一个数字与第一个位置数字交换,之后再剩余的数当中再次找到最小的数字与第二个位置交换,依此循环到倒数第二个数字和最后一个数字比较结束为止。

具体代码实现如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
$arr(12,43,57,32,51,76,36,91,28,46,40);
functionselectSort($arr) {
$len=count($arr);
for($i=0;$i<$len-1;$i++) {
//假设最小值的位置
$p= $i;
for($j=$i+1;$j<$len;$j++) {
//$arr[$p] 已知的最小值
if($arr[$p] > $arr[$j]) {
//比较发现更小的记录下最小值的位置,并且在下次比较时采用已知的最小值进行比较。
$p= $j;
}
}
//确定当前最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
if($p!= $i) {
$tmp= $arr[$p];
$arr[$p] = $arr[$i];
$arr[$i] = $tmp;
}
}
return$arr;
}


4、快速排序法

分析:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

具体代码实现如下:

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
$arr(12,43,57,32,51,76,36,91,28,46,40);
functionquickSort($arr) {
//判断是否继续进行
$length= count($arr);
if($length<= 1) {
return$arr;
}
//选择第一个数字作为基准
$base_num= $arr[0];
//遍历除了基准外的所有数字,按照大小关系放入两个数组内,之后初始化两个数组
$left_array= array();//小于基准
$right_array= array();//大于基准
for($i=1;$i<$length;$i++) {
if($base_num> $arr[$i]) {
//放入左边数组
$left_array[] = $arr[$i];
}else{
//放入右边数组
$right_array[] = $arr[$i];
}
}
//分别对两数组进行相同的排序处理方式递归
$left_array= quick_sort($left_array);
$right_array= quick_sort($right_array);
//合并数组
returnarray_merge($left_array,array($base_num),$right_array);
}
来源地址:http://blog.yoodb.com/yoodb/article/detail/295
资源下载链接为: https://pan.quark.cn/s/22ca96b7bd39 在当今的软件开发领域,自动化构建与发布是提升开发效率和项目质量的关键环节。Jenkins Pipeline作为一种强大的自动化工具,能够有效助力Java项目的快速构建、测试及部署。本文将详细介绍如何利用Jenkins Pipeline实现Java项目的自动化构建与发布。 Jenkins Pipeline简介 Jenkins Pipeline是运行在Jenkins上的一套工作流框架,它将原本分散在单个或多个节点上独立运行的任务串联起来,实现复杂流程的编排与可视化。它是Jenkins 2.X的核心特性之一,推动了Jenkins从持续集成(CI)向持续交付(CD)及DevOps的转变。 创建Pipeline项目 要使用Jenkins Pipeline自动化构建发布Java项目,首先需要创建Pipeline项目。具体步骤如下: 登录Jenkins,点击“新建项”,选择“Pipeline”。 输入项目名称和描述,点击“确定”。 在Pipeline脚本中定义项目字典、发版脚本和预发布脚本。 编写Pipeline脚本 Pipeline脚本是Jenkins Pipeline的核心,用于定义自动化构建和发布的流程。以下是一个简单的Pipeline脚本示例: 在上述脚本中,定义了四个阶段:Checkout、Build、Push package和Deploy/Rollback。每个阶段都可以根据实际需求进行配置和调整。 通过Jenkins Pipeline自动化构建发布Java项目,可以显著提升开发效率和项目质量。借助Pipeline,我们能够轻松实现自动化构建、测试和部署,从而提高项目的整体质量和可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值