《常见排序算法--PHP实现》
原文地址:
本文地址:http://www.cnblogs.com/aiweixiao/p/8202360.html
Original 2018-01-02 关注 微信公众号 程序员的文娱情怀
1.概述
常见的排序算法,虽然很基础,但是很见功力,如果能思路清晰,很快写出来各个算法的代码实现,还是需要花一点功夫的,今天,就跟大家盘点下常用的一些算法。
冒泡排序
插入排序
选择排序
希尔排序
堆排序
归并排序
快速排序
2.各个排序代码实现(PHP版本)
代码详见GitHub: http://t.cn/RHjBCU7
2.1 冒泡排序
1)【定义】:就是第一个位置上的数与他相邻第二个位置上的数比较,如果比他相邻的数小,则两者交换位置,否则不交换。接着第一个位置上的数与第三个位置上的数比较大小,也是小则交换,一直到和最后一个位置的数比较交换完毕。然后,是下一个循环,就是第二个位置上的数重复上面的比较交换操作,直到把整个数列变成是一个从小到大的有序序列。
2)【代码实现】:两层for循环搞定。

2.2 插入排序
1)【定义】:从一堆待排序的数列中选出来一个最小值(可以认为第一个数就是已排序的数列),然后从剩余的带排序的数列中选出来最小值有序放到已排序的数列中,依次操作,直到最后的数列都是一个从小到大的有序数列为止。
2)【代码实现】:

2.3 选择排序
1)【定义】: 从一堆待排序的数列中选出来一个最小值,放到新的数组的第一个位置,继续从剩余的数列中选取最小值放入到数组中,重复上面的步骤,将数字都取出来排成新的有序数列。
2)【代码实现】:


2.4 希尔排序
1)【定义】: 插入排序的一种改进,先比较一定距离的元素成为有序数列,再比较缩小增量距离的元素(可为元素的数量的一半),一直到比较的是相邻元素的时候,就成为了插入排序。所以希尔排序是插入排序的改进。
2)【代码实现】:

2.5 堆排序
1)【定义】:1️⃣构造大顶堆 2️⃣交换堆顶和堆底 3️⃣重复前面的步骤升序排列完成
详细说明参看: https://www.cnblogs.com/chengxiao/p/6129630.html
2)【代码实现】


2.6 归并排序
1)【定义】:就是将待排序的数列看成是单个的有序的数列,然后进行合并,直到合并成最后的完成整有序的数列。
详细可参考:https://www.cnblogs.com/jingmoxukong/p/4308823.html
2)代码实现:
主函数mergeSort(),两个子函数mergePass() 和 merge()



2.7 快速排序
1)定义:该算法的基本思想是:
1.先从数列中取出一个数作为基准数。
2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。
3.再对左右区间重复第二步,直到各区间只有一个数
2)代码实现:

3.排序总结
各种排序的稳定性,时间复杂度、空间复杂度、稳定性总结如下图:

《常见排序算法--PHP实现》的更多相关文章
- 简单物联网:外网访问内网路由器下树莓派Flask服务器
最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...
- 利用ssh反向代理以及autossh实现从外网连接内网服务器
前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...
- 外网访问内网Docker容器
外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...
- 外网访问内网SpringBoot
外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...
- 外网访问内网Elasticsearch WEB
外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...
- 怎样从外网访问内网Rails
外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...
- 怎样从外网访问内网Memcached数据库
外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...
- 怎样从外网访问内网CouchDB数据库
外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...
- 怎样从外网访问内网DB2数据库
外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...
- 怎样从外网访问内网OpenLDAP数据库
外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...
随机推荐
- WeakHashMap
WeakHashMap 今天在具体业务的时候看到HashMap和WeakHashMap的区别.因为PHP语言并没有这种概念.所以很好奇做了一下研究. WeakHashMap WeakHashMap所谓 ...
- 【朝花夕拾】Android性能篇之(六)Android进程管理机制
前言 Android系统与其他操作系统有个很不一样的地方,就是其他操作系统尽可能移除不再活动的进程,从而尽可能保证多的内存空间,而Android系统却是反其道而行之,尽可能保留进程.An ...
- 【朝花夕拾】Android性能篇之(四)Apk打包
前言 APK,即Android Package,是将android程序和资源整合在一起,形成的一个.apk文件.相信所有的Android程序员是在IDE的帮助下,完成打包轻而易举,但对打包流程真正清楚 ...
- 从零开始学习PYTHON3讲义(五)while循环和棋盘麦粒问题
<从零开始PYTHON3>第五讲 上一节课重点学习了字符串,并且传递了一个重要的理念,就是程序要对开发人员自己和用户都足够友好.在这个过程中,利用字符串给出充分.完整.准确的提示是非常重 ...
- 序列化Serializable和Parcelable
版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 简单记录下序列化Serializable和Parcelable的使用方法. Android中Intent如果要传递类对象,可以通过两 ...
- Linux~常用的命令
大叔学Linux就一个目的,部署在它上面的服务,如redis,mongodb,fastDFS,cat,docker,mysql,nginx等 下面找一下的命令,来学学这个神秘的操作系统 常用指令 ls ...
- 你真的会PHP吗?
Note: 1) PHP中的数据类型 PHP一共支持八种数据类型, 4种标量类型,boolean(布尔型),integer(整形),float/double(浮点型)和string(字符串类型), 2 ...
- leetcode — binary-tree-inorder-traversal
import java.util.Arrays; import java.util.Stack; import java.util.TreeMap; /** * * Source : https:// ...
- 痞子衡嵌入式:ARM Cortex-M文件那些事(1)- 源文件(.c/.h/.s)
大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家讲的是嵌入式开发里的source文件. 众所周知,嵌入式开发属于偏底层的开发,主要编程语言是C和汇编.所以本文要讲的source文件主要指的就是 ...
- python基础1--安装、package、数据类型
1.下载python 下载地址https://www.python.org/downloads/ 2.Package以及数据类型 自带package和外部package 自带package举例: os ...