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

充效率看

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

内部排序法

交换式排序法

冒泡法

基本思想:

冒泡排序法

案例:

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. 一张图告诉你,只会NodeJS还远远不够!

    NodeJS看似小巧简单,却威力无边,一张图,秒懂!!! 可能很多人还不会安装,但至少已经会了javascript,或者至少会了jquery,那么js还可以干更多的事情!js还可以干更多的事情!js还 ...

  2. block 应用说明

    一.Block定义 Block可以理解为一个函数指针(即它是一个指针,指向某个函数) returnType (^blockName) (parameter list) = ^ (parameter l ...

  3. Android线程池(转)

    .前言 转载请注明出处:http://blog.csdn.net/seu_calvin/article/details/52415337 使用线程池可以给我们带来很多好处,首先通过线程池中线程的重用, ...

  4. jmeter中文件上传配置

  5. 百度影棒安装apk方法

    确保影棒和电脑接入家中同一WIFI中,开启影棒USB调试,手机端运行悟空助手或沙发管家等软件,之后无线推送需要安装的APK. 安装文件管理apk后,可以使用U盘安装.

  6. jquery 不支持$.browser

    if (!$.browser) { $.browser = { mozilla : /firefox/.test(navigator.userAgent.toLowerCase()), webkit ...

  7. 我用ABAP做过的那些无聊的事情

    国庆大假马上就要来临了,我们聊点轻松的话题,关于假期. Jerry的成都同事李贝宁(Li Ben), <SAP成都研究院李三郎:SCP Application Router简介>的作者,有 ...

  8. Android计算器简单逻辑实现

    Android计算器简单逻辑实现 引言: 我的android计算器的实现方式是:按钮输入一次,就处理一次. 但是如果你学过数据结构(栈),就可以使用表达式解析(前缀,后缀)处理. 而这个方式已经很成熟 ...

  9. 2012-2013 ACM-ICPC, NEERC, Central Subregional Contest C Sequence (打表)

    打个表找找规律,到24445的时候乘2以后产生了0出现循环. 一般地,判断循环节是否存在可以用Floyd判圈算法. #include<bits/stdc++.h> using namesp ...

  10. WPF中实现两个窗口之间传值

    在使用WPF的时候,我们经常会用到窗体之间传值,下面示例主窗口传值到子窗口,子窗口传值到主窗口的方法. 一.主窗口向子窗口传值 主窗口向子窗口传值主要方法就是在子窗口建立一个接收主窗口值的变量,然后实 ...