【算法】php实现排序(一)
选择排序
方式:先让第一位与其他位比较大小找到最小的数字,然后是第二位与除第一位的其他位比较大小找出第二位,依此类推
$arr = [2,45,12,67,33,5,23,132,46];
for ($i=0; $i < count($arr); $i++) {
for ($j=$i+1; $j <count($arr) ; $j++) {
if($arr[$i] > $arr[$j]){
$tmp = $arr[$i];
$arr[$i] = $arr[$j];
$arr[$j] = $tmp;
}
}
} print_r($arr);
冒泡排序
方法:比较相邻两个位置的数据并进行排序
优化:添加字段 if_replace 判断该轮排序是否完成,如果完成则不再继续后面的排序
$arr = [2,45,12,67,33,5,23,132,46];
$if_replace = false;
for ($i=0; $i < count($arr); $i++) {
for ($j=0; $j < count($arr)-1; $j++) {
if($arr[$j] > $arr[$j+1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j+1];
$arr[$j+1] = $tmp;
$if_replace = true;
}
}
if(!$if_replace){
break;
}
}
print_r($arr);
插入排序
方法:通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入
$arr = [2,45,12,67,33,5,23,132,46];
for ($i=0; $i < count($arr)-1; $i++) {
for ($j=$i+1; $j > 0; $j--) {
if($arr[$j] < $arr[$j-1]){
$tmp = $arr[$j];
$arr[$j] = $arr[$j-1];
$arr[$j-1] = $tmp;
}else{
break;
}
}
} print_r($arr);
希尔排序
方法:设待排序元素序列有n个元素,首先取一个整数increment(小于n)作为间隔将全部元素分为increment个子序列,
所有距离为increment的元素放在同一个子序列中,在每一个子序列中分别实行直接插入排序。
然后缩小间隔increment,重复上述子序列划分和排序工作。直到最后取increment=1,将所有元素放在同一个子序列中排序为止。
$arr = [2,45,12,67,33,5,23,132,46];
$increment = count($arr);
do{ $increment = floor($increment/3)+1; for ($i=0; $i < $increment; $i++) {
$k = 0;
$j = $i;
do{ for ($m=$j+$increment; $m > 0; $m-=$increment) {
if($arr[$m-$increment] > $arr[$m] && $arr[$m]){
$tmp = $arr[$m];
$arr[$m] = $arr[$m-$increment];
$arr[$m-$increment] = $tmp;
}else{
break;
}
} $k++;
$j = $i+($k*$increment);
}while($j<count($arr)); } }while($increment > 1);
print_r($arr);
快速排序
方法:先从数列中取出一个数作为基准数,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边,依此操作直到各区间只有一个数
$arr = [33, 24, 8, 21, 2, 23, 3, 32, 16];
function quickSort($arr)
{
$count = count($arr); if ($count < 2) {
return $arr;
} $leftArray = $rightArray = array();
$middle = $arr[0];// 基准值 for ($i = 1; $i < $count; $i++) {
// 小于基准值,存入左边;大于基准值,存入右边
if ($arr[$i] < $middle) {
$leftArray[] = $arr[$i];
} else {
$rightArray[] = $arr[$i];
}
} $leftArray = quickSort($leftArray);
$rightArray = quickSort($rightArray); return array_merge($leftArray, array($middle), $rightArray);
} print_r(quickSort($arr));
【算法】php实现排序(一)的更多相关文章
- 排序算法总结------选择排序 ---javascript描述
每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...
- Java中的经典算法之选择排序(SelectionSort)
Java中的经典算法之选择排序(SelectionSort) 神话丿小王子的博客主页 a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕.也就是:每一趟 ...
- (转)白话经典算法系列之八 MoreWindows白话经典算法之七大排序总结篇
在我的博客对冒泡排序,直接插入排序,直接选择排序,希尔排序,归并排序,快速排序和堆排序这七种常用的排序方法进行了详细的讲解,并做成了电子书以供大家下载.下载地址为:http://download.cs ...
- Java常见排序算法之Shell排序
在学习算法的过程中,我们难免会接触很多和排序相关的算法.总而言之,对于任何编程人员来说,基本的排序算法是必须要掌握的. 从今天开始,我们将要进行基本的排序算法的讲解.Are you ready?Let ...
- 插入排序算法--直接插入算法,折半排序算法,希尔排序算法(C#实现)
插入排序算法主要分为:直接插入算法,折半排序算法(二分插入算法),希尔排序算法,后两种是直接插入算法的改良.因此直接插入算法是基础,这里先进行直接插入算法的分析与编码. 直接插入算法的排序思想:假设有 ...
- java结构与算法之选择排序
一 .java结构与算法之选择排序(冒择路兮快归堆) 什么事选择排序:从一组无序数据中选择出中小的的值,将该值与无序区的最左边的的值进行交换. 简单的解释:假设有这样一组数据 12,4,23,5,找到 ...
- JS中的算法与数据结构——排序(Sort)(转)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- JS中的算法与数据结构——排序(Sort)
排序算法(Sort) 引言 我们平时对计算机中存储的数据执行的两种最常见的操作就是排序和查找,对于计算机的排序和查找的研究,自计算机诞生以来就没有停止过.如今又是大数据,云计算的时代,对数据的排序和查 ...
- 数据结构与算法之PHP排序算法(堆排序)
一.堆的定义 堆通常是一个可以被看做一棵树的数组对象,其任一非叶节点满足以下性质: 1)堆中某个节点的值总是不大于或不小于其父节点的值: 每个节点的值都大于或等于其左右子节点的值,称为大顶堆.即:ar ...
- 数据结构与算法之PHP排序算法(希尔排序)
一.基本思想 希尔排序算法是希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本. 该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量”的元素组成的)分别进行直接 ...
随机推荐
- 机器学习 - 算法 - PCA 主成分分析
PCA 主成分分析 原理概述 用途 - 降维中最常用的手段 目标 - 提取最有价值的信息( 基于方差 ) 问题 - 降维后的数据的意义 ? 所需数学基础概念 向量的表示 基变换 协方差矩阵 协方差 优 ...
- Python简单计算数组元素平均值的方法示例
Python简单计算数组元素平均值的方法示例 本文实例讲述了Python简单计算数组元素平均值的方法.分享给大家供大家参考,具体如下: Python 环境:Python 2.7.12 x64 IDE ...
- page工具类
工具类 /** * @Title: PageUtil.java * @Package * @Description: TODO(用一句话描述该文件做什么) * @author licy * @date ...
- AWS 核心服务概述(二)
目录 AWS网络服务 VPC Direct Connect Route53 AWS 计算服务 EC2 EMR(Elastic MapReduce) AWS Lambda Auto Scaling El ...
- EXCEL中,在其中列 前面or后面加一个“元”字的技巧
EXCEL小技巧,我们平常需要用到一些,记录下,供有需要的人参考! 案例: EXCEL其中的一列,每个后面加一个“元”字,如果要1个1个去加,相当麻烦,其实很简单,只需要一个公式即可! 解决方法: ( ...
- Zuul1与Spring Cloud Gateway对比
一.API网关 1.1 Zuul1简介 1.2 Spring Cloud Gateway简介 二.对比 2.0 产品对比 2.1 性能对比 2.1.1 低并发场景 2.1.2 高并发场景 2.1.3 ...
- execl文件读取封装
前言:做自动化常用的公共方法 注:第一次使用记得先 pip install xlrd 模块import xlrd class ReadExecl(): def __init__(self,filena ...
- SourceTree使用图解
看完这篇文档你能做到的是: 1.简单的用Git管理项目. 2.怎样既要开发又要处理发布出去的版本bug情况. SourceTree是一个免费的Git图形化管理工具,mac下也可以安装. 下载地址:ht ...
- 表单绑定 v-model
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- [转帖]阿里云VS腾讯云 谁才是中国未来的云计算之王?
阿里云VS腾讯云 谁才是中国未来的云计算之王? https://www.qianzhan.com/analyst/detail/220/191008-f05009f6.html 吴小燕• 2019-1 ...