排序算法,以php为代码示例
一、冒泡排序
<?php
/**
* Created by PhpStorm.
* User: 郑楚周
* Date: 2018/9/28
* Time: 16:10
*/ /**冒泡排序
* Class Bubble
*/
class Bubble implements sort
{
/**冒泡排序
* @param $arr
*/
public function sort($arr)
{
$count = count($arr);
if($count <= 0) return '不能为空数组'; for($i = ($count - 2); $i >= 0; $i--) {
for ($j = 0; $j <= $i; $j++) {
if($arr[$j] > $arr[$j+1]) {
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
}
}
}
return $arr;
}
} 二、选择排序
<?php
/**
* Created by PhpStorm.
* User: 郑楚周
* Date: 2018/9/28
* Time: 16:10
*/ /**选择排序
* Class Select
*/
class Select implements sort
{
public function sort($arr)
{
$count = count($arr);
for ($i = 0; $i < $count; $i++) {
$minIndex = $i;
for ($j = $i + 1; $j < $count; $j++) {
if ($arr[$minIndex] > $arr[$j]) {
$minIndex = $j;
}
}
helper::swap($arr[$i], $arr[$minIndex]);
}
return $arr;
}
}
三、插入排序
<?php
/**
* Created by PhpStorm.
* User: 郑楚周
* Date: 2018/10/5
* Time: 16:43
*/ /**插入排序
* Class Insert
*/
class Insert implements sort
{
/**版本1
* @param $arr
* @return mixed
*/
/* public function sort($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
for ($j = $i; $j > 0 && $arr[$j] < $arr[$j - 1]; $j--) {
helper::swap($arr[$j], $arr[$j - 1]);
}
}
return $arr;
}*/ /**版本2
* @param $arr
* @return mixed
*/
public function sort($arr)
{
$count = count($arr);
for ($i = 1; $i < $count; $i++) {
$tmp = $arr[$i];
for ($j = $i; $j > 0 && $tmp < $arr[$j - 1]; $j--) {
$arr[$j] = $arr[$j - 1];
}
$arr[$j] = $tmp;
}
return $arr;
}
}
四、归并排序
<?php
/**
* Created by PhpStorm.
* User: 郑楚周
* Date: 2018/10/5
* Time: 19:26
*/ /**归并排序
* Class Merge
*/
class Merge implements sort
{
/**自上向下归并排序
* @param $arr
*/
public function sort($arr)
{
$this->__mergeSort($arr, 0, count($arr) - 1);
return $arr;
} /**自下向上归并排序
* @param $arr
*/
public function sortBu($arr)
{
$count = count($arr);
for ($sz = 1; $sz <= $count; $sz += $sz) {
for ($i = 0; $i < $count - $sz; $i += 2*$sz) {
$this->__merge($arr, $i, $i + $sz - 1, helper::min($i + 2*$sz - 1, $count - 1));
}
}
return $arr;
} private function __mergeSort(&$arr, $left, $right)
{
if ($left >= $right) {
return;
}
$mid = floor(($left + $right)/2);
$this->__mergeSort($arr, $left, $mid);
$this->__mergeSort($arr, $mid + 1, $right);
if ($arr[$mid] > $arr[$mid + 1])
$this->__merge($arr, $left, $mid, $right);
} /**将$arr[$left]~$arr[$mid]和$arr[$mid + 1]~$arr[$right]两部分进行归并
* @param $arr
* @param $left
* @param $mid
* @param $right
*/
private function __merge(&$arr, $left, $mid, $right)
{
$tmpArr = $arr;
for ($k = $left, $i = $left, $j = $mid + 1; $k <= $right; $k++) {
if ($i > $mid) {
$arr[$k] = $tmpArr[$j++];
} elseif ($j > $right) {
$arr[$k] = $tmpArr[$i++];
} elseif ($tmpArr[$i] < $tmpArr[$j]) {
$arr[$k] = $tmpArr[$i++];
} else { // $tmpArr[$i] >= $tmpArr[$j]
$arr[$k] = $tmpArr[$j++];
}
}
}
}
五、快速排序
<?php
/**
* Created by PhpStorm.
* User: 郑楚周
* Date: 2018/10/6
* Time: 11:02
*/
class Quick implements sort
{
/**
* @param $arr
* @return mixed
*/
public function sort($arr)
{
$this->__quick($arr, 0, count($arr) - 1);
return $arr;
} /**
* @param $arr
* @param $l
* @param $r
*/
private function __quick(&$arr, $l, $r)
{
if ($l >= $r)
return; $p = $this->__partition($arr, $l, $r);
$this->__quick($arr, $l, $p);
$this->__quick($arr, $p + 1, $r);
} /**遍历$l+1到$r,每个值和$l的值比较,将数值小的放在数组左侧,大的放在右侧,最后在将$l对应的值和$j对应的值交换位置
* @param $arr
* @param $l
* @param $r
* @return mixed
*/
private function __partition(&$arr, $l, $r)
{
$v = $arr[$l];
$j = $l;
for ($i = $l + 1; $i <= $r; $i++) {
if ($arr[$i] < $v)
helper::swap($arr[$i], $arr[++$j]);
}
helper::swap($arr[$l], $arr[$j]);
return $j;
}
} 六、排序效率对比如下

排序算法,以php为代码示例的更多相关文章
- 第二章:排序算法 及其他 Java代码实现
目录 第二章:排序算法 及其他 Java代码实现 插入排序 归并排序 选择排序算法 冒泡排序 查找算法 习题 2.3.7 第二章:排序算法 及其他 Java代码实现 --算法导论(Introducti ...
- 动画展现十大经典排序算法(附Java代码)
0.算法概述 0.1 算法分类 十种常见排序算法可以分为两大类: 比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序. 非比较类排序: ...
- 常见排序算法原理及JS代码实现
目录 数组 sort() 方法 冒泡排序 选择排序 插入排序 希尔排序 归并排序 堆排序 快速排序 创建时间:2020-08-07 本文只是将作者学习的过程以及算法理解进行简单的分享,提供多一个角度的 ...
- PCA 降维算法详解 以及代码示例
转载地址:http://blog.csdn.net/watkinsong/article/details/38536463 1. 前言 PCA : principal component analys ...
- 八大排序算法JS及PHP代码实现
从学习数据结构开始就接触各种算法基础,但是自从应付完考试之后就再也没有练习过,当在开发的时候也是什么时候使用什么时候去查一下,现在在学习JavaScript,趁这个时间再把各种基础算法整理一遍,分别以 ...
- js学习笔记之排序算法的原理及代码
冒泡排序 比较任何两个相邻的项,如果第一个比第二个大,则交换它们 重复这样的操作,直到排序完成,具体代码如下: let arr = [67,23,11,89,45,76,56,99] function ...
- 最全排序算法原理解析、java代码实现以及总结归纳
算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过 ...
- [Data Structure & Algorithm] 八大排序算法
排序有内部排序和外部排序之分,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存.我们这里说的八大排序算法均为内部排序. 下图为排序 ...
- Java学习笔记——排序算法之快速排序
会当凌绝顶,一览众山小. --望岳 如果说有哪个排序算法不能不会,那就是快速排序(Quick Sort)了 快速排序简单而高效,是最适合学习的进阶排序算法. 直接上代码: public class Q ...
- Java实现基本排序算法
稳定排序算法性能比较 冒泡排序代码: /** * 冒泡排序 * * @param arr * @return */ public int[] bubbleSort(int[] arr) { int t ...
随机推荐
- Mac下Ruby升级与Rails的安装
也是醉了,网上查了半天一脸懵逼.然后自己动手试试 gem install rails瞬间命令行就没反应了,以为命令行挂了,但是一会儿报错说是没有权限. 好吧,那么来这个 sudo gem instal ...
- java数组与字符串相互转换、整型与字符串相互转换【详解】
java 数组->字符串 1.char数组(字符数组)->字符串 可以通过:使用String.copyValueOf(charArray)函数实现. 举例: char[] arr={ ...
- IIS重新注册
打开程序-运行-cmd:输入一下命令重新注册IISC:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\aspnet_regiis.exe -i
- 【转】Hive安装及使用攻略
Posted: Jul 16, 2013 Tags: HadoophiveHiveQLsql分区表 Comments: 18 Comments Hive安装及使用攻略 让Hadoop跑在云端系列文章, ...
- PostgreSQL 9.6.2版本在centOS下的安装和配置
1.如果有用yum安装过旧版,卸载掉: yum remove postgresql* 2.更新一下yum: sudo yum update 3.去 官网 找到 适合你系统 的资源的下载地址,然后使用w ...
- [UOJ386]鸽子固定器
题解 堆+贪心 题意就是给你\(n\)个物品,让你最多选\(m\)个 每个物品有两个属性\(a_i,b_i\) 最大化\((\sum_{a_i})^{dv}+(max(b_i)-min(b_i))^{ ...
- [Usaco2017 Feb]Why Did the Cow Cross the Road II (Gold)
Description 上下有两个长度为n.位置对应的序列A.B, 其中数的范围均为1~n.若abs(A[i]-B[j])<= 4,则A[i]与B[j]间可以连一条边. 现要求在边与边不相交的情 ...
- Java中的流(3)字符流-Reader和Writer
java中提供了处理以16位的Unicode码表示的字符流的类,即以Reader和Writer 为基类派生出的一系列类. 1.Reader和Writer 这两个类是抽象类,只是提供了一系列用于字符 ...
- C#中的list的System.Predicate<in T>和System.Comparison<in T>的应用
public class Data { ; ; ; ; public Data() { count++; ma = count; } } //一句话删除满足要求的集合 Asm.RemoveAll((D ...
- Rsync 12种故障排查及思路
Rsync 故障排查整理 Rsync服务常见问题汇总讲解: ====================================================================== ...