首页 技术 正文
技术 2022年11月6日
0 收藏 742 点赞 862 浏览 2005 个字

这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程。

充效率看

冒泡排序法<选择排序法<插入排序法 排序分两大类:

内部排序法

交换式排序法

冒泡法

基本思想:

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
//简单的
$arr=array(0,5,-1);

//现在我们把函数毛片封装成函数,利用以后使用
//数组默认传递的是值,不是地址,&是地址符
function bubble(&$myarr){
//这是一个中间变量
$temp=0;
//我们要把数组从小到大

//外层循环
for($i=0;$i<count($myarr)-1;$i++){
     for($j=0;$j<count($myarr)-1-$i;$j++){
    //说明前面的数比后面的数大,就要交换
     if($myarr[$j]>$myarr[$j+1]){
       $temp=$myarr[$j];
       $myarr[$j]=$myarr[$j+1];
       $myarr[$j+1]=$temp;
    }
  }
}
}
//使用函数去排序
bubble($arr);
//输出
print_r($arr);

分析图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

分析图

选择排序法

示意图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

选择排序示意图

案例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
//选择排序法
function selectSort(&$arr){
//定义中间变量
$temp=0;

for($i=0;$i<count($arr)-1;$i++){
      //假设$i就是最小的数
         $minVal=$arr[$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;
}
}

流程图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

流程图

插入排序法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//插入排序法
function insertSort(&$arr){
//先默认下标为0,这个数已经是有序
     for($i=1;$i<count($arr);i++){
//$insertVal是准备插入的数
        $insertVal=%arr[$i];
//准备先和和$insertIndex比较
        $insertIndex=$i-1;
//如果这个条件满足,说明,我们还没有找到适当的位置
        while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
//同时把数后移
        $arr[$insertIndex+1]=$arr[$insertInde];
             $insertIndex–;
}
//插入这时就给$insertVal找的了适当位置
$arr[$insertIndex+1]=$insertVal;
}
}

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

流程图

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
function quickSort($lefl,$right,&$array){
   $l=$lefl;
   $r=$right;
   $pivot = $array[($lefl+$right)/2];

whlie($l<$r){
    while($array[$l]<$pivot) $l++;
    while($array[$r]>$pivot) $r–;

if($l>=$r) break;

$temp=$array[$l];
    $array[$l]=$array[$r];
    $array[$r]=$temp;

if($array[$l]==$pivot) –$r;
    if($array[$r]==$pivot) ++$l;
}
    if($l==$r){
        $l++;
        $r–;
}
    if($left<$r)   quickSort($left,$r,$array);
    if($right>$l)  quickSort($l,$right,$array);
}

动态创建200000个数据

1
2
3
for($i=0;$I<200000;$i++){
    $array[$i]=rand(0,3000);
}

分析流程图

php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

快速排序法

     声明:  文章内容源自互联网,分享于互联网!

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,412
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,185
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905