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. 在一个css文件中引入其他css文件

    @import "./main.css";@import "./color-dark.css";@import "./reset.css";

  2. 2018.5.17 oracle函数查询

    --*********函数*********** --1.显示当前日期 select sysdate from dual; --2.显示当前日期,格式为****年月日,别名为hday select t ...

  3. 客户端(springmvc)调用netty构建的nio服务端,获得响应后返回页面(同步响应)

    后面考虑通过netty做一个真正意义的简约版RPC框架,今天先尝试通过正常调用逻辑调用netty构建的nio服务端并同步获得返回信息.为后面做铺垫 服务端实现 我们先完成服务端的逻辑,逻辑很简单,把客 ...

  4. systemd 中的requires, wants, before, after

    man systemd.unit    man systemd.service ###依赖关系和前后顺序* 依赖关系:Requires和Wants * 前后顺序:After,Before 依赖关系,前 ...

  5. ATM-core-src

    from interface import bank, shopping, userfrom lib import common user_data = { 'name': None} def log ...

  6. vue 中有时候是数据没有同步的问题

    1,在项目中,在做表格的数据渲染的时候,表格中有input标签的数据来进行双向绑定, this.$set(this.tableTitle.money, index, money[index]+isMo ...

  7. 用描述符实现classmethod方法和staticmethod方法

    1. @classmethod class ClassMethod: def __init__(self, func): self.func = func def __get__(self, inst ...

  8. 684. Redundant Connection

    https://leetcode.com/problems/redundant-connection/description/ Use map to do Union Find. class Solu ...

  9. STM32启动文件:startup_stm32f10x_hd.s等启动文件的简单描述

    在官方的库文件中,分别有如下文件: startup │ │ │ ├─arm │ │ │ │ startup_stm32f10x_cl.s │ │ │ │ startup_stm32f10x_hd.s ...

  10. Linux 内核源码外编译 linux模块--编译驱动模块的基本方法

    1.先编写一个简单的hello模块,hello.c 源码如下: #ifndef __KERNEL__ # define __KERNEL__ #endif #ifndef MODULE # defin ...