原文地址

本文地址: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)【代码实现】

 
堆排序主函数heapSort()
 
堆排序子函数

2.6 归并排序


1)【定义】:就是将待排序的数列看成是单个的有序的数列,然后进行合并,直到合并成最后的完成整有序的数列。

详细可参考:https://www.cnblogs.com/jingmoxukong/p/4308823.html

2)代码实现:

主函数mergeSort(),两个子函数mergePass() 和 merge()

 
归并排序主函数mergeSort()
 
归并排序子函数mergePass()
 
归并排序子函数merge() 

2.7 快速排序


1)定义:该算法的基本思想是:

1.先从数列中取出一个数作为基准数。

2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。

3.再对左右区间重复第二步,直到各区间只有一个数

2)代码实现:

 
快速排序

3.排序总结

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

 
排序算法比较
 

《常见排序算法--PHP实现》的更多相关文章

  1. 简单物联网:外网访问内网路由器下树莓派Flask服务器

    最近做一个小东西,大概过程就是想在教室,宿舍控制实验室的一些设备. 已经在树莓上搭了一个轻量的flask服务器,在实验室的路由器下,任何设备都是可以访问的:但是有一些限制条件,比如我想在宿舍控制我种花 ...

  2. 利用ssh反向代理以及autossh实现从外网连接内网服务器

    前言 最近遇到这样一个问题,我在实验室架设了一台服务器,给师弟或者小伙伴练习Linux用,然后平时在实验室这边直接连接是没有问题的,都是内网嘛.但是回到宿舍问题出来了,使用校园网的童鞋还是能连接上,使 ...

  3. 外网访问内网Docker容器

    外网访问内网Docker容器 本地安装了Docker容器,只能在局域网内访问,怎样从外网也能访问本地Docker容器? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Docker容器 ...

  4. 外网访问内网SpringBoot

    外网访问内网SpringBoot 本地安装了SpringBoot,只能在局域网内访问,怎样从外网也能访问本地SpringBoot? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装Java 1 ...

  5. 外网访问内网Elasticsearch WEB

    外网访问内网Elasticsearch WEB 本地安装了Elasticsearch,只能在局域网内访问其WEB,怎样从外网也能访问本地Elasticsearch? 本文将介绍具体的实现步骤. 1. ...

  6. 怎样从外网访问内网Rails

    外网访问内网Rails 本地安装了Rails,只能在局域网内访问,怎样从外网也能访问本地Rails? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Rails 默认安装的Rails端口 ...

  7. 怎样从外网访问内网Memcached数据库

    外网访问内网Memcached数据库 本地安装了Memcached数据库,只能在局域网内访问,怎样从外网也能访问本地Memcached数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装 ...

  8. 怎样从外网访问内网CouchDB数据库

    外网访问内网CouchDB数据库 本地安装了CouchDB数据库,只能在局域网内访问,怎样从外网也能访问本地CouchDB数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动Cou ...

  9. 怎样从外网访问内网DB2数据库

    外网访问内网DB2数据库 本地安装了DB2数据库,只能在局域网内访问,怎样从外网也能访问本地DB2数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动DB2数据库 默认安装的DB2 ...

  10. 怎样从外网访问内网OpenLDAP数据库

    外网访问内网OpenLDAP数据库 本地安装了OpenLDAP数据库,只能在局域网内访问,怎样从外网也能访问本地OpenLDAP数据库? 本文将介绍具体的实现步骤. 1. 准备工作 1.1 安装并启动 ...

随机推荐

  1. Android客户端与服务器交互方式-小结

    最近的Android项目开发过程中一个问题困扰自己很长时间,Android客户端与服务器交互有几种方式,最常见的就是webservices和json.要在Android手机客户端与pc服务器交互,需要 ...

  2. 【ASP.NET Core快速入门】(九) RoutingMiddleware介绍以及MVC引入

    前言 前面我们介绍了使用app.Map来配置路由,但是对于一般不是特别大的项目来说,我们不使用Map来进行路由配置. 配置路由 我们首先需要在Startup.cs文件中的ConfigureServic ...

  3. 汇编实现: C库常见函数,串操作指令作用

    目录 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 二丶loads实现Strlen操作. 三丶stos的作用 汇编实现: C库常见函数 一丶汇编实现Strncpy拷贝函数 void _ ...

  4. 阿里云—Gartner 2018 亚太区WAF魔力象限唯一云WAF提供商

    近日,Gartner发布亚太区2018年度Web应用防火墙(简称“WAF”)魔力象限报告,阿里云WAF凭借成熟的产品能力和完善的服务体系成功入围,且是唯一一家进入该魔力象限的云WAF提供商. 报告指出 ...

  5. Jenkins结合.net平台之ftp客户端

    上一节我们讲解了如何配置ftp服务端,本节我们讲解如何使用winscp搭建ftp客户端,为什么使用winscp而不是filezilla客户端版,前面我们简单说过,这里不再赘述. 下载winscp以后我 ...

  6. 消息队列中间件(三)Kafka 入门指南

    Kafka 来源 Kafka的前身是由LinkedIn开源的一款产品,2011年初开始开源,加入了 Apache 基金会,2012年从 Apache Incubator 毕业变成了 Apache 顶级 ...

  7. Java高并发--原子性可见性有序性

    Java高并发--原子性可见性有序性 主要是学习慕课网实战视频<Java并发编程入门与高并发面试>的笔记 原子性:指一个操作不可中断,一个线程一旦开始,直到执行完成都不会被其他线程干扰.换 ...

  8. pythn print格式化输出---------"%s 和 % d" 都是什么意思?

    pythn print格式化输出. %r 用来做 debug 比较好,因为它会显示变量的原始数据(raw data),而其它的符号则是用来向用户显示输出的. 1. 打印字符串 print (" ...

  9. 程序员50题(JS版本)(六)

    程序26:给一个不多于5位的正整数.要求:一.求它是几位数,二.逆序打印出各位数字. var test=456; var arr=[]; arr[0]=test%10; arr[1]=parseInt ...

  10. js数组方法大全

    JavaScript中创建数组有两种方式 (一)使用 Array 构造函数: var arr1 = new Array(); //创建一个空数组var arr2 = new Array(20); // ...