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. Java jvm 内存回收机制

    http://blog.csdn.net/yaerfeng/article/details/51291903 在Java中,它的内存管理包括两方面:内存分配(创建Java对象的时候)和内存回收,这两方 ...

  2. SQL 值得记住的点

    概要 记录在学习过程中,遇到的不懂且需要掌握的知识点.主要基于 MySQL.   汇总      replace 函数      删除重复      取子串 substr      项连接      ...

  3. PHP开发框架流行度排名:Laravel居首

    摘要:在PHP开发中,选择合适的框架有助于加快软件开发,节约宝贵的项目时间,让开发者专注于功能的实现上.Sitepoint网站做了一个小的调查,结果显示最流行的PHP框架前三甲为:Laravel.Ph ...

  4. 深入理解Java GC

    一.概述 GC(Carbage Collection)垃圾收集器,由JVM自动回收已死亡的对象垃圾. 这也是Java与C++等语言的主要区别之一. 二.如何确认对象已死 1. 引用计数算法 引用计数法 ...

  5. java算法面试题:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,但要保证汉字不被截取半个, 如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,而不是“我ABC+汉的半个”。

    package com.swift; import java.util.Scanner; public class Hanzi_jiequ { public static void main(Stri ...

  6. content is king – Bill Gates (1/3/1996) 内容为王 - 比尔盖茨

    以下中文版本由谷歌翻译 内容为王 - 比尔盖茨(1/3/1996) 内容是我期望在互联网上赚取大部分真钱的地方,就像在广播中一样. 半个世纪前开始的电视革命催生了许多行业,包括制造电视机,但长期的赢家 ...

  7. JZOJ 5771. 【NOIP2008模拟】遨游

    5771. [NOIP2008模拟]遨游 (File IO): input:trip.in output:trip.out Time Limits: 2000 ms  Memory Limits: 2 ...

  8. JZOJ 1266. 玉米田

    1266. 玉米田(cowfood.pas/c/cpp) (File IO): input:cowfood.in output:cowfood.out Time Limits: 1000 ms  Me ...

  9. Python知识点进阶——迭代器

    可迭代对象 可迭代对象可以简单的理解为用for循环遍历的,如list.tuple.dict.set.str 判断一个对象是否是迭代器: 可以将数据类型 和 是否为可迭代对象 比较来判断是否是可以迭代 ...

  10. Python中的tuple

    tuple_lst = [ ('元祖容器可哈希',), ('元祖中的元素不可直接修改',), ('元祖可迭代',), ('查',), ('练习',), ] 元祖容器可哈希 >>>ha ...