1. // 冒泡排序

    function BubbleSort($arr) {

    // 获得数组总长度

    $num = count($arr);

    // 正向遍历数组

    for ($i = 1; $i < $num; $i++) {

    // 反向遍历

    for ($j = $num - 1; $j >= $i ; $j--) {

    // 相邻两个数比较

    if ($arr[$j] < $arr[$j-1]) {

    // 暂存较小的数

    $iTemp = $arr[$j-1];

    // 把较大的放前面

    $arr[$j-1] = $arr[$j];

    // 较小的放后面

    $arr[$j] = $iTemp;

    }

    }

    }

    return $arr;

    }

  2. // 交换法排序

    function ExchangeSort($arr){

    $num = count($arr);

    // 遍历数组

    for ($i = 0;$i < $num - 1; $i++) {

    // 获得当前索引的下一个索引

    for ($j = $i + 1; $j < $num; $j++) {

    // 比较相邻两个的值大小

    if ($arr[$j] < $arr[$i]) {

    // 暂存较小的数

    $iTemp = $arr[$i];

    // 把较大的放前面

    $arr[$i] = $arr[$j];

    // 较小的放后面

    $arr[$j] = $iTemp;

    }

    }

    }

    return $arr;

    }

  3. // 选择法排序

    function SelectSort($arr) {

    // 获得数组总长度

    $num = count($arr);

    // 遍历数组

    for ($i = 0;$i < $num-1; $i++) {

    // 暂存当前值

    $iTemp = $arr[$i];

    // 暂存当前位置

    $iPos = $i;

    // 遍历当前位置以后的数据

    for ($j = $i + 1;$j < $num; $j++){

    // 如果有小于当前值的

    if ($arr[$j] < $iTemp) {

    // 暂存最小值

    $iTemp = $arr[$j];

    // 暂存位置

    $iPos = $j;

    }

    }

    // 把当前值放到算好的位置

    $arr[$iPos] = $arr[$i];

    // 把当前值换成算好的值

    $arr[$i] = $iTemp;

    }

    return $arr;

    }

  4. // 插入法排序

    function InsertSort($arr){

    $num = count($arr);

    // 遍历数组

    for ($i = 1;$i < $num; $i++) {

    // 获得当前值

    $iTemp = $arr[$i];

    // 获得当前值的前一个位置

    $iPos = $i - 1;

    // 如果当前值小于前一个值切未到数组开始位置

    while (($iPos >= 0) && ($iTemp < $arr[$iPos])) {

    // 把前一个的值往后放一位

    $arr[$iPos + 1] = $arr[$iPos];

    // 位置递减

    $iPos--;

    }

    $arr[$iPos+1] = $iTemp;

    }

    return $arr;

    }

  5. // 快速排序

    function QuickSort($arr){

    $num = count($arr);

    $l = $r = 0;

    $left = $right = array();

    // 从索引的第二个开始遍历数组

    for ($i = 1;$i < $num; $i++) {

    // 如果值小于索引1

    if ($arr[$i] < $arr[0]) {

    // 装入左索引数组(小于索引1的数据)

    $left[] = $arr[$i];

    $l++;

    } else {

    // 否则装入右索引中(大于索引1的数据)

    $right[] = $arr[$i];

    $r++; //

    }

    }

    // 如果左索引有值 则对左索引排序

    if($l > 1) {

    $left = QuickSort($left);

    }

    // 排序后的数组

    $new_arr = $left;

    // 将当前数组第一个放到最后

    $new_arr[] = $arr[0];

    // 如果又索引有值 则对右索引排序

    if ($r > 1) {

    $right = QuickSort($right);

    }

    // 根据右索引的长度再次增加数据

    for($i = 0;$i < $r; $i++) {

    $new_arr[] = $right[$i];

    }

    return $new_arr;

    }

PHP排序的几种方法的更多相关文章

  1. 用Java集合中的Collections.sort方法对list排序的两种方法

    用Collections.sort方法对list排序有两种方法第一种是list中的对象实现Comparable接口,如下: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...

  2. 转:python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法 方法1.用List的内建函数list.sort进行排序 list.sort(func=None, key=None, reverse=False) Py ...

  3. python list排序的两种方法及实例讲解

    对List进行排序,Python提供了两个方法方法1 用List的内建函数list sort进行排序list sort(func=None, key=None, reverse=False)Pytho ...

  4. 实现对多维数组按照某个键值排序的两种方法(array_multisort和array_sort)

    实现对多维数组按照某个键值排序的两种解决方法(array_multisort和array_sort): 第一种:array_multisort()函数对多个数组或多维数组进行排序.    //对数组$ ...

  5. 计算机二级-C语言-程序修改题-190116记录-对数组进行排序的两种方法。

    //函数fun的功能是:将n个无序整数从小到大排序. //冒泡排序法:小数往下浮,大数往上浮.把数都存到一个数组,然后两两比较,大数往后交换.双层递减循环. //第二种方法:都放入一个数组中,然后记录 ...

  6. Java中List排序的3种方法

    在某些特殊的场景下,我们需要在 Java 程序中对 List 集合进行排序操作.比如从第三方接口中获取所有用户的列表,但列表默认是以用户编号从小到大进行排序的,而我们的系统需要按照用户的年龄从大到小进 ...

  7. Java中对List集合排序的两种方法

    第一种方法,就是list中对象实现Comparable接口,代码如下: public class Person implements Comparable<Person> { privat ...

  8. java实现排序的几种方法

    package com.ywx.count; import java.util.Scanner; /** * 题目:排序的几种方式(汇总及重构) * @author Vashon(yangwenxue ...

  9. python-快速排序,两种方法→易理解

    快速排序(Quicksort)是对冒泡排序的一种改进. 快速排序由C. A. R. Hoare在1962年提出.它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另 ...

  10. List集合序列排序的两种方法

    首先讲一下Comparable接口和Comparator接口,以及他们之间的差异.有助于Collections.sort()方法的使用.请参考 1.Comparable自然规则排序//在自定义类Stu ...

随机推荐

  1. 使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10

    使用POI 读取 Excel 文件,读取手机号码 变成 1.3471022771E10 [问题点数:40分,结帖人xieyongqiu]             不显示删除回复             ...

  2. 树莓派(raspberry pi)更改键盘布局

    http://blog.csdn.net/c80486/article/details/8460271 树莓派(raspberry pi)用了几次后,发现键盘老是按错,一些字符打不出来或打错 这个问题 ...

  3. python 多进程简单调用

    python 多进程简 #!/usr/bin/env python #-*- coding:utf-8 -*- # author:leo # datetime:2019/5/28 10:03 # so ...

  4. Mybatis自查询递归查找子

    先看一下数据库 主键id,名称product_code,父parent,和kind 设计菜单类 setter,getter Dao public interface ProductMapper { L ...

  5. jrtplib移植

    jrtplib版本:3.11.1 jthread版本:1.3.3 libsrtp版本:1.6.0 jrtplib库有两种编译方式: 1. 使能jthread编译,此方式可使jrtplib自动在后台轮询 ...

  6. (83)zabbix Less than 25% free in the configuration cache解决

    在zabbix server默认配置下,出现告警:Less than 25% free in the configuration cache,字面意思是:可用的配置缓存少于25%. 报错如下图: 增加 ...

  7. Ansible指令和常用模块使用

    这里文章记录一下ansible的指令选项和常用的模块使用 ansible指令选项 -m:要执行的模块,默认为command -a:模块的参数 -u:ssh连接的用户名,默认用root,ansible. ...

  8. PyCharm 2018.1 软件汉化

    下载汉化包 链接: https://pan.baidu.com/s/1buLFINImW_3cNzP8HsB4cA 密码: fqpu 安装汉化包 找到pycharm安装目录 直接把刚刚下载的汉化包复制 ...

  9. Nuxt.js 基础入门教程

    原文链接 Vue 开发一个单页面应用,相信很多前端工程师都已经学会了,但是单页面应用有一个致命的缺点,就是 SEO 极不友好.除非,vue 能在服务端渲染(ssr)并直接返回已经渲染好的页面,而并非只 ...

  10. 微信小程序 input组件type属性3个值的作用

    input组件是小程序的内容输入框组件,通常是这样来使用的: <input type="text" placeholder="输入点内容吧" /> ...