PHP常见排序算法
$a = [1, 3, 5, 2, 4, 6, 12, 60, 45, 10, 32];
$len = count($a);
$num=0; /*
* 冒泡排序
* 原理:不停的对相邻两个数进行比较,直到最大的数冒出来,重复该过程
*
*/
for ($i = 0; $i < $len-1; $i++) {
for ($j=0;$j<$len-1;$j++){
if($a[$j] <$a[$j+1] ){
$temp=$a[$j];
$a[$j]=$a[$j+1];
$a[$j+1]=$temp; }
}
} /*
* 直接插入排序
* 原理:当前插入位置之前的元素有序
* 若插入当前位置的元素比有序元素最后一个元素大,则什么也不做
* 否则在有序序列中找到插入的位置,并插入
*
*/
for($i=0;$i<$len-1;$i++){
if ($a[$i]>$a[$i+1]){
for ($j=$i;$j>=0;$j--){
if($a[$j]>$a[$j+1]){
$temp=$a[$j+1];
$a[$j+1]=$a[$j];
$a[$j]=$temp;
$num++;
}else{
break;
}
}
}
} /*
* 简单选择排序
* 原理:从数组第一个元素开始依次确定从小到大的元素
*/
for ($i=0;$i<$len-1;$i++){
$k=$i;
for($j=$i+1;$j<$len;$j++){
if($a[$k] > $a[$j] ){
$k=$j;
}
}
if ($k!= $i){
$temp=$a[$k];
$a[$k]=$a[$i];
$a[$i]=$temp;
}
} /*
* 希尔排序
* 原理:将数组按指定步长分隔成若干子序列,然后分别对子序列进行排序(在这是直接)
*/
$k = floor($len / 2); while ($k>0) {
for ($i = 0; $i < $k; $i++) {
for ($j = $i; $j < $len && $j + $k < $len; $j = $j + $k) {
if ($a[$j] > $a[$j + $k]) {
$temp = $a[$j + $k];
$a[$j + $k] = $a[$j];
$a[$j] = $temp;
}
$num++;
}
$k=floor($k/2);
}
} //快速排序和归并排序的整体思想是先拆分在合并 /*
* 快速排序
* 原理:通过一趟排序将待排的记录分为两个独立的部分,其中一部分的记录的关键字均不大于
* 另一部分记录的关键字,然后再分别对这两部分记录继续进行快速排序,以达到整个序列有序,具体做法需要
* 每趟排序设置一个标准关键字和分别指向头一个记录的关键字和最后一个记录的关键字的指针。
*
*/ function quickSort2($array){
if (!isset($array[1]))
return $array;
$mid=$array[0];
$leftArray=[];
$rightArray=[];
foreach ($array as $k=>$v){
if($v>=$mid && $k!=0 ){
$rightArray[]=$v;
}
if($v<$mid){
$leftArray[]=$v;
}
}
$leftArray=quickSort2($leftArray);
$leftArray[]=$mid;
$rightArray=quickSort2($rightArray);
return array_merge($leftArray,$rightArray);
} /*
* 归并排序
* 原理:将数组拆分成两个独立的部分,然后在对独立的部分进行归并排序,它和快速排序的区别在于儿子的左边和儿子
* 的右边进行比较,然后合并成父left或父right
*/
function mergeSort($array){
$k=floor(count($array)/2);
if (!isset($array[1]))
return $array;
$leftArray=mergeSort(array_slice($array,0,$k));
$rightArray=mergeSort(array_slice($array,$k)); while (count($leftArray) && count($rightArray) ){
$m[]= ($leftArray[0] > $rightArray[0]) ? array_shift($rightArray) : array_shift($leftArray);
} return array_merge($m,$leftArray,$rightArray);
}
PHP常见排序算法的更多相关文章
- 常见排序算法(附java代码)
常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...
- JS常见排序算法
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- JavaScript版几种常见排序算法
今天发现一篇文章讲“JavaScript版几种常见排序算法”,看着不错,推荐一下原文:http://www.w3cfuns.com/blog-5456021-5404137.html 算法描述: * ...
- 常见排序算法(JS版)
常见排序算法(JS版)包括: 内置排序,冒泡排序,选择排序,插入排序,希尔排序,快速排序(递归 & 堆栈),归并排序,堆排序,以及分析每种排序算法的执行时间. index.html <! ...
- 常见排序算法-Python实现
常见排序算法-Python实现 python 排序 算法 1.二分法 python 32行 right = length- : ] ): test_list = [,,,,,, ...
- python常见排序算法解析
python——常见排序算法解析 算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法 ...
- python——常见排序算法解析
算法是程序员的灵魂. 下面的博文是我整理的感觉还不错的算法实现 原理的理解是最重要的,我会常回来看看,并坚持每天刷leetcode 本篇主要实现九(八)大排序算法,分别是冒泡排序,插入排序,选择排序, ...
- 常见排序算法总结 -- java实现
常见排序算法总结 -- java实现 排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间 ...
- 常见排序算法题(java版)
常见排序算法题(java版) //插入排序: package org.rut.util.algorithm.support; import org.rut.util.algorithm.Sor ...
- [算法] 常见排序算法总结(C语言版)
常见排序算法总结 本文对比较常用且比较高效的排序算法进行了总结和解析,并贴出了比较精简的实现代码,包括选择排序.插入排序.归并排序.希尔排序.快速排序等.算法性能比较如下图所示: 1 冒泡排序 基本原 ...
随机推荐
- 通过Java WebService接口从服务端下载文件
一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的 ...
- Java 多线程之线程池的使用
一. 使用背景 谈到Java多线程,我们很自然的会想到并发,在编写多线程代码时,我们一般会创建多个线程,如果并发的线程数量很多,而且每个线程都是执行一个时间很短的任务就结束了,这样频繁的进行线程的创建 ...
- 分享调用Java private方法
上周在修复bug时,发现Java类中某方法是private,且类中没有用到,第一感觉是方法多余.其实通过分析,发现原来Native Code会通过JNI调到此方法.这也给自己启发,平时做Code re ...
- 3D模型展示以及体积、表面积计算
本文原创 如转载请注明出处!!! 本博客地址http://www.cnblogs.com/we-jack 本文原创,如果有同样需求的小伙伴请第一时间联系我 或者在留言区留言 上次为大家提供了3D模型的 ...
- 部署wcf出现的问题与解决方法
我将本机作为服务器开发时,没出什么问题,将wcf服务端寄缩到另一台电脑上时,出现了一些问题,这里总结下: 1.wcf服务器和另一个网站应用出问题 服务器的iis上有一个网站应用,当我将wcf服务寄缩到 ...
- 部署Flask项目到腾讯云服务器CentOS7
部署Flask项目到腾讯云服务器CentOS7 安装git yum install git 安装依赖包 支持SSL传输协议 解压功能 C语言解析XML文档的 安装gdbm数据库 实现自动补全功能 sq ...
- 二分查找的变种(Java实现)
普通二分查找: 先回顾一下普通的二分查找 注意:二分查找有这样一个问题:当数组中数有重复时,比如 {3,3,3,3} 这个数组,二分查找3时,返回的是arr[1],也就是说二分查找并不会返回3第一次出 ...
- gdb命令调试技巧
gdb命令调试技巧 一.信息显示1.显示gdb版本 (gdb) show version2.显示gdb版权 (gdb) show version or show warranty3.启动时不显示提示信 ...
- python web开发-flask中日志的使用
Flask使用日志记录的方式: 初始化flask应用实例 在flask中使用logger,需要初始化一个flask的应用 app = Flask(__name__) 2. 调用logger 直接调用l ...
- MYSQL数据库学习十五 事务
15.1 事务概述 当多个用户访问同一份数据,一个用户在更改数据的过程中可能有其他用户同时发起更改请求,为保证数据库记录的更新从一个一致性状态变为另一个一致性状态,使用事务处理是非常必要的. 事务有以 ...