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

充效率看

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

内部排序法

交换式排序法

冒泡法

基本思想:

冒泡排序法

案例:

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);

分析图

分析图

选择排序法

示意图

选择排序示意图

案例

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;
}
}

流程图

流程图

插入排序法

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快速排序法代码

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排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法的更多相关文章

  1. 【排序算法】——冒泡排序、选择排序、插入排序、Shell排序等排序原理及Java实现

    排序 1.定义: 所谓排序,即是整理文件中的内容,使其按照关键字递增或递减的顺序进行排列. 输入:n个记录,n1,n2--,其对应1的关键字为k1,k2-- 输出:n(i1),n(i2)--,使得k( ...

  2. Java常用的经典排序算法:冒泡排序与选择排序

     一.冒泡排序                             冒泡排序(Bubble Sort)是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为 ...

  3. JavaScript算法(冒泡排序、选择排序与插入排序)

    冒泡排序.选择排序与插入排序复杂度都是二次方级别的,放在一起说吧. 介绍一些学习这三个排序方法的比较好的资料.冒泡排序看<学习JavaScript数据结构与算法>介绍的冒泡排序,选择排序看 ...

  4. 「浙江理工大学ACM入队200题系列」问题 A: 零基础学C/C++34—— 3个数比较大小(冒泡排序与选择排序算法)

    本题是浙江理工大学ACM入队200题第四套中的A题,同时给出了冒泡排序和选择排序算法 我们先来看一下这题的题面. 由于是比较靠前的题目,这里插一句.各位新ACMer朋友们,请一定要养成仔细耐心看题的习 ...

  5. 冒泡排序和选择排序(Go语言实现)

    冒泡排序和选择排序是排序算法中比较简单和容易实现的算法.冒泡排序的思想为:每一次排序过程,通过相邻元素的交换,将当前没有排好序中的最大(小)移到数组的最右(左)端.而选择排序的思想也很直观:每一次排序 ...

  6. Java数据结构和算法总结-冒泡排序、选择排序、插入排序算法分析

    前言:排序在算法中的地位自然不必多说,在许多工作中都用到了排序,就像学生成绩统计名次.商城商品销量排名.新闻的搜索热度排名等等.也正因为排序的应用范围如此之广,引起了许多人深入研究它的兴趣,直至今天, ...

  7. Java排序算法分析与实现:快排、冒泡排序、选择排序、插入排序、归并排序(二)

    一.概述: 上篇博客介绍了常见简单算法:冒泡排序.选择排序和插入排序.本文介绍高级排序算法:快速排序和归并排序.在开始介绍算法之前,首先介绍高级算法所需要的基础知识:划分.递归,并顺带介绍二分查找算法 ...

  8. ObjC语法练习 冒泡排序、选择排序、矩阵相乘

    用OC实现的冒泡排序.选择排序.矩阵相乘,纯粹是用来练习语法. 冒泡排序,程序如下: void bubbleSort() { //初始化数组 NSMutableArray *array1 = [[NS ...

  9. Java版冒泡排序和选择排序

    一.理解说明 1.理解和记忆 冒泡排序:依次定位数组元素,每次只和相邻的且符合条件的元素交换位置. 选择排序:依次在数组的每个位置,通过逐个对比选择出最大或最小的元素. 2.知识点说明 (1)数组是引 ...

  10. [Java算法] -- 1. 常用排序之冒泡排序和选择排序

    使用Java语言实现冒泡排序和选择排序 推荐一个数据结构可视化的网站:http://zh.visualgo.net/zh (暂时访问不了) 对排序不太熟悉的朋友,建议去上面的网站学习一下,你将会发现一 ...

随机推荐

  1. 洛谷 P2253 好一个一中腰鼓!

    题目背景 话说我大一中的运动会就要来了,据本班同学剧透(其实早就知道了),我萌萌的初二年将要表演腰鼓[喷],这个无厘头的题目便由此而来. Ivan乱入:“忽一人大呼:‘好一个安塞腰鼓!’满座寂然,无敢 ...

  2. Spring IOC模块的简单介绍

    首先,本人正在学习spring,这是一点心得体会,所以本文中会有不足.错误之处,欢迎各位大佬进行指点. 其次对于框架而言,知道反射是很重要,所以建议在学会反射了后在去看看框架. Spring:是企业级 ...

  3. UVA 10735 Euler Circuit (最大流)

    题意:求混合图的欧拉路径. 一句话总结:网络流,最主要在于建图,此题是将出度则是和流量联系在了一起,用最大流来调整边的指向. 分析: 这题的困难之处在于无向边只能用一次,相当于一个方向未定的有向边. ...

  4. R文件报错的原因

    一般R文件报错,无非是资源文件错误,图片命名错误,但是编译都会报错,可以很快解决.但是前几天,引入一个第三方aar包后,项目编译正确,但是就是R文件报错,找不到R文件,整个项目一片报红. 1)首先编译 ...

  5. C#背景图片自适应

    1.选中窗体修改属性 2.在load添加代码 private void Form1_Load(object sender, EventArgs e) { this.BackgroundImageLay ...

  6. ftl-server静态资源服务器

    ftl-server 是一前端开发工具,支持解析freemarker模板,模拟后端接口,反向代理等功能. 特性 解析freemarker模板 静态资源服务 mock请求 代理请求 livereload ...

  7. 题解 P5082 【成绩】

    随机跳题跳到了这一题,一看是个红题,本蒟蒻就 艰难地思考起来 高兴地写起来 这题实在不能用数组,用了数组就RE 一开始就卡在这上面了 说实话,这道题真的 很难 不算很难,只要照着公式往上面套就行了 废 ...

  8. ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

    部署docker下的mysql时出现以下报错 [root@docker ~]# mysql -h192.168.30.22 -uroot -p Enter password: 出现报错: ERROR ...

  9. linx vim 文件操作 ubuntu server 软件源

    mv /etc/danted.conf /etc/danted.conf.bak sudo wget https://files.cnblogs.com/files/marklove/danted.t ...

  10. shell脚本,打印九九乘法表。

    [root@localhost ~]# .sh #!/bin/bash #计算九九乘法表 ` do ` do [ $j -le $i ] && echo -n "$i*$j= ...