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

充效率看

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

内部排序法

交换式排序法

冒泡法

基本思想:

冒泡排序法

案例:

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. Java编程基础-运算符

    Java中的运算符大致分为:算术运算符.赋值运算符.关系运算符.逻辑运算符和位运算符五类. (1).算术运算符:+  -  *  /  %  ++  -- (2).赋值运算符:=  +=  -=  * ...

  2. php后端程序开发学习网站梳理

    博主只列举自己经常用到的: 看教学视频:慕课网,网易云课堂,百度传课 看博文和知识点:csdn 看源码:github 刷题:codewars 学习框架:thinkphp官网 下载相关资源:csdn 看 ...

  3. DataGridView使用技巧(七、设定列宽和行高自动调整)----.NET

    DataGridView使用技巧(七.设定列宽和行高自动调整)----.NET 1) 设定行高和列宽自动调整 [VB.NET]' 设定包括Header和所有单元格的列宽自动调整DataGridView ...

  4. 高效vim插件

    目录[-] 高效vim插件 插件管理利器 高效插件集 NerdTree snipMate tagbar jedi-vim eclim c.vim vim-colorschemes vim配置 一个实例 ...

  5. Unity3d中MonoBehavior默认函数的执行顺序和生命周期

    Awake()在MonoBehavior创建后就立刻调用,在脚本实例的整个生命周期中,Awake函数仅执行一次:如果游戏对象(即gameObject)的初始状态为关闭状态,那么运行程序,Awake函数 ...

  6. Gym 100342I Travel Agency (Tarjan)

    题意读懂了就好做了,就是求一下点双连通分量.维护一下一颗子树的结点数,对于一个结点当u是割点的时候, 统计一下u分割的连通分量v,每得到一个连通分量的结点数cnt(v)和之前连通分量结点数sum相乘一 ...

  7. UVA 1661 Equation (后缀表达式,表达式树,模拟,实现)

    题意:给出一个后缀表达式f(x),最多出现一次x,解方程f(x) = 0. 读取的时候用一个栈保存之前的结点,可以得到一颗二叉树,标记出现'X'的路径,先把没有出现'X'的子树算完,由于读取建树的时候 ...

  8. URAL 2047 Maths (数学)

    对于一个数来说,它的除数是确定的,那么它的前驱也是确定的,而起点只能是1或2,所以只要类似筛法先预处理出每个数的除数个数 ,然后递推出每个数往前的延伸的链长,更新最大长度,记录对应数字.找到maxn以 ...

  9. 从汇编看c++中的多态

    http://www.cnblogs.com/chaoguo1234/archive/2013/05/19/3079078.html 在c++中,当一个类含有虚函数的时候,类就具有了多态性.构造函数的 ...

  10. js 一维数组转成tree 对象

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...