冒泡排序:

function bubbleSort($array){
  $len=count($array);
  //该层循环控制 需要冒泡的轮数
  for($i=1;$i<$len;$i++){
    //该层循环用来控制每轮 冒出一个数 需要比较的次数
    for($k=0;$k<$len-$i;$k++){
      if($array[$k]>$array[$k+1]){
        $tmp=$array[$k+1];
        $array[$k+1]=$array[$k];
        $array[$k]=$tmp;
      }
    }
  }
  return $array;
}

快速排序:

function quickSort($array){
  if (count($array) <= 1) return $array;
  $key=$array[0];
  $left_arr=array();
  $right_arr=array();
  for($i=1;$i<count($array);$i++){
    if($array[$i]<=$key){
      $left_arr[]=$array[$i];
    }else{
      $right_arr[]=$array[$i];
    }
  }
  $left_arr=quickSort($left_arr);
  $right_arr=quickSort($right_arr);
  return array_merge($left_arr,array($key),$right_arr);
}

选择排序:

function selectSort($array) {
  //双重循环完成,外层控制轮数,内层控制比较次数
  $len=count($array);
  for($i=0; $i<$len-1; $i++) {
    //先假设最小的值的位置
    $p = $i;
    for($j=$i+1; $j<$len; $j++) {
      //$array[$p] 是当前已知的最小值
      if($array[$p] > $array[$j]) {
        //比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
        $p = $j;
      }
    }
    //已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。
    if($p != $i) {
      $tmp = $array[$p];
      $array[$p] = $array[$i];
      $array[$i] = $tmp;
    }
  }
  return $array; //返回最终结果
}

插入排序:

function insertSort($array) {
  $len=count($array);
  for($i=1, $i<$len; $i++) {
    $tmp = $array[$i];
    //内层循环控制,比较并插入
    for($j=$i-1;$j>=0;$j--) {
      if($tmp < $array[$j]) {
        //发现插入的元素要小,交换位置,将后边的元素与前面的元素互换
        $array[$j+1] = $array[$j];
        $array[$j] = $tmp;
      } else {
        //如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。
        break;
      }
    }
  }
  return $array;
}

二叉树(二分法)排序:

/**
* 递归方法实现二分查找法.
* @param Array数组
* @param low 数组第一位置
* @param high 最高
* @param k 要查找的值.
* @return 返回值. */
function binSearch($array, $low, $high, $k){
  if ($low <= $high){
    $mid = intval(($low+$high)/2);
    if ($array[$mid] == $k){
      return $mid;
    }elseif ($k < $array[$mid]){
      return binSearch($array, $low, $mid-1, $k);
    }else{
      return binSearch($array, $mid+1, $high, $k);
    }
  }
  return -1;
}

[PHP]基本排序(冒泡排序、快速排序、选择排序、插入排序、二分法排序)的更多相关文章

  1. 数组排序代码,冒泡排序&快速排序&选择排序

    冒泡排序: for(var i=0;i<arr.length-1;i++){ for(var j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1 ...

  2. Java数据结构和算法(三)--三大排序--冒泡、选择、插入排序

    三大排序在我们刚开始学习编程的时候就接触过,也是刚开始工作笔试会遇到的,后续也会学习希尔.快速排序,这里顺便复习一下 冒泡排序: 步骤: 1.从首位开始,比较首位和右边的索引 2.如果当前位置比右边的 ...

  3. C语音中最简单的排序冒泡排序和选择排序代码实现(非指针)

    #include<stdio.h> int main() { int a[5] = { 2,5,7,3,-1 }; int n = sizeof(a) / sizeof(a[0]);//元 ...

  4. Java数据结构和算法(五)--希尔排序和快速排序

    在前面复习了三个简单排序Java数据结构和算法(三)--三大排序--冒泡.选择.插入排序,属于算法的基础,但是效率是偏低的,所以现在 学习高级排序 插入排序存在的问题: 插入排序在逻辑把数据分为两部分 ...

  5. Javascript中的冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序 算法性能分析

    阿里面试中有一道题是这样的: 请用JavaScript语言实现 sort 排序函数,要求:sort([5, 100, 6, 3, -12]) // 返回 [-12, 3, 5, 6, 100],如果你 ...

  6. 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)

    不多说,直接上干货! 插入排序包括直接插入排序.希尔排序. 1.直接插入排序: 如何写成代码: 首先设定插入次数,即循环次数,for(int i=1;i<length;i++),1个数的那次不用 ...

  7. php排序介绍_冒泡排序_选择排序法_插入排序法_快速排序法

    这里我们介绍一些常用的排序方法,排序是一个程序员的基本功,所谓排序就是对一组数据,按照某个顺序排列的过程. 充效率看 冒泡排序法<选择排序法<插入排序法 排序分两大类: 内部排序法 交换式 ...

  8. C#之快速排序 C#之插入排序 C#之选择排序 C#之冒泡排序

    C#之快速排序   算法描述 1.假定数组首位元素为“枢轴”,设定数列首位(begin)与末位(end)索引: 2.由末位索引对应元素与“枢轴”进行比较,如果末位索引对应元素大于“枢轴”元素,对末位索 ...

  9. Python实现八大排序(基数排序、归并排序、堆排序、简单选择排序、直接插入排序、希尔排序、快速排序、冒泡排序)

    目录 八大排序 基数排序 归并排序 堆排序 简单选择排序 直接插入排序 希尔排序 快速排序 冒泡排序 时间测试 八大排序 大概了解了一下八大排序,发现排序方法的难易程度相差很多,相应的,他们计算同一列 ...

随机推荐

  1. github-windows本地安装

    Step1 准备工作 msysgit,下载地址为 http://msysgit.github.io/ . Eclipse IDE for Java EE Developers(必须是这个,自带Egit ...

  2. java分析源码-ReentrantLock

    一.前言 在分析了 AbstractQueuedSynchronier 源码后,接着分析ReentrantLock源码,其实在 AbstractQueuedSynchronizer 的分析中,已经提到 ...

  3. Publishing failed with multiple errors 异常

    Publishing failed with multiple errors 在使用eclipse发布项目时不能自动生成class文件,且无法启动调试的Tomcat服务.启动过程提示 以上 异常 解决 ...

  4. <<< Oracle序列的创建、修改、删除基本操作

    序列是一个命名的顺序编号生成器,可以被多个用户共享,类似sqlserver中的identity create sequence 序列名; //直接创建一个序列 CREATE SEQUENCE 序列名; ...

  5. mysql命令总结

    统计全库数据量: use information_schema; SELECT TABLE_NAME, (DATA_LENGTH) as DataM , (INDEX_LENGTH) as Index ...

  6. ajax 提交表单文件上传

    <form action="" method="post" enctype="multipart/form-data" id=&quo ...

  7. ecshop 后台分页功能

    Ecshop分页规则,分以下几个步骤 1.点击类别,获取第一页获取默认分类列表数据 2.点击“下一页”,采用ajax调取分页内容 实例分析(比如订单列表分页admin/order.php) 1.先写一 ...

  8. linux下apache各种跳转(包括伪静态)的配置

      1.404跳转: vi /etc/httpd/conf/httpd.conf 在虚拟主机配置里添加一行:ErrorDocument 404 /404.html 2.301跳转: 1)将不带www的 ...

  9. Win7 64位下PowerDesigner连接64位Oracle11g数据库

    操作系统:WIN7 64旗舰版 Oracle版本:64位11g PowerDesigner版本:15.1 问题描述:因为PowerDesigner是32的程序,连接数据库会默认开启32位的ODBC,因 ...

  10. jsp页面中引用其他页面的方法

    初看这个标题....大家的感觉一定是好2啊.....博主一定要说jsp的动态引用(jsp:include)和静态引用(@include)了.介绍这两者区别的文章已经烂大街了..一搜一大把..博主竟然还 ...