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. vue使用animate.css类库实现动画

    首先安装animate.css类库 cnpm install animate.css –save 然后在vue的script文件中引用 import $ from '../assets/js/jque ...

  2. java面向对象思想2

    1.主函数是一类特殊的函数,作为程序入口,可被虚拟机调用.主函数格式是固定的.public:函数访问权限最大.static:代表函数随着类的加载已经存在.void:主函数没有具体返回值.main:不是 ...

  3. 1037: [ZJOI2008]生日聚会Party

    Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 3121  Solved: 1858[Submit][Status][Discuss] Descript ...

  4. js数组中去重对象

    var allCourses = new Array();var coursesId = new Array();function findCourses() { Courses.data().eac ...

  5. Python_深浅拷贝

    深浅拷贝 ‘copy’和'='的区别:copy会开辟一个新的空间,而‘=’不会. 浅copy只会copy第一层,再里边的就进行共享了. 需要记住的是copy之后记住的是内存寻址地址,而浅copy时如果 ...

  6. ES6-总结

    在最近进行的项目中,已经全面使用到ES6,这里对ES6进行整理总结.用得比较多的是带*的内容,这些语法.新增类型.模块调用等从代码量上.可读性上.操作上给项目带来了不少便利.   1.语法 1.1.命 ...

  7. 数据结构-模式匹配串算法(KMP)

    #include<cstdio> #include<iostream> #include<string> #include<cstring> #incl ...

  8. stm32的systick原理与应用

    /* SysTick滴答定时器 一.功能 SysTick定时器是一个简单的定时器,CM3\CM4内核芯片都具备此定时器.SysTick定时器常用来做延时,采用实时系统时则用来做系统时钟.无论用作延时还 ...

  9. Paper Folding UVA - 177 模拟+思路+找规律

    题目:题目链接 思路:1到4是很容易写出来的,我们先考虑这四种情况的绘制顺序 1:ru 2:rulu 3:rululdlu 4:rululdluldrdldlu 不难发现,相较于前一行,每一次增加一倍 ...

  10. ListNode Java创建链表

    用了一种自创的比较简洁的方式来创建链表 class ListNode { //为了方便,这两个变量都使用pub1ic, //存放数据的变量,直接为int型 public int data; //存放结 ...