php三种排序算法
1.
<?php
/**
* 快速排序不费空间也节省时间
*/
$arr=array(5,1,8,2,6,4,9,3,7);
// $arr=array(1,2,3,4,5,6,7,8,9);
// $arr=array(9,8,7,6,5,4,3,2,1);
// $arr=array(1,5,9,7,6,4);
function fast($arr)
{
//统计数组长度
$length=count($arr);
//定义两个空数组
$left=array();
$right=array();
//如果数组长度<1,返回数组
if($length<=1){
return $arr;
}
for($i=1;$i<$length;$i++){
//找一个数作为比较,为了方便数组中的第一个数
if($arr[0]>$arr[$i]){
//小于这个数的放入这个数组,第一次后数组中1243
$left[]=$arr[$i];
}else{
//大于这个数的放入这个数组,第一次后数组中8697
$right[]=$arr[$i];
}
}
var_dump($left);
//递归调用实现排序
$left=fast($left);
//把第一次比较数放入两个数组中的一个
$left[]=$arr[0];
$right=fast($right);
return array_merge($left,$right);
}
var_dump(fast($arr));
?>
2.
<?php
/**
* 冒泡排序费时间
*/
//随便定义一个数组,即要比较的数
$arr=array(12,11,63,9,25);
$arr=array(1,2,3,4,5,6,7,8,9);
//$arr=array(999,888,777,6,5,4,3,2,1);
function maopao($arr)
{
//统计数组的长度
$length=count($arr);
//外层循环就是数组有多少个数我就要把这个数组遍历多少次,每一次里层循环排好序的数组
for($i=0;$i<$length;$i++)
{
//里层循环就是为了进行排序,$l-1是因为冒泡排序法只要比较$l-1次
for($j=0;$j<$length-1;$j++)
{
//如果相邻数不比它后面的数小就不用排序,如果小后面的数会出现在前面的位置
if($arr[$j]<$arr[$j+1]){
$t=$arr[$j];
$arr[$j]=$arr[$j+1];
$arr[$j+1]=$t;
}
}
}
return $arr;
}
var_dump(maopao($arr));
?>
3.
<?php
/**
* 桶排序费空间
*/
//定义一个数组,及要排序的数
$arr=array(3,5,5,2,8);
function tong($arr)
{
//定义一个一维数组,一定要比你所要比较的数大,数组里的数就相当于一个桶,定义在100以内
$tong=range(0,100);
//把数组里的数都 初始化为0
for($i=0;$i<=10;$i++){
$tong[$i]=0;
}
//重新给数组赋值
foreach($arr as $value){
//$arr中的数与$a中的索引对应,$arr中有一个$a的索引值就要自增, ++就是自增的意思
$tong[$value]++;
}
for($i=0;$i<=10;$i++){
//$j=1是因为,$a中索引值>=1的是我们想要输出的
for($j=1;$j<=$tong[$i];$j++)
{
echo $i;
}
}
}
tong($arr);
?>
php三种排序算法的更多相关文章
- 排序—时间复杂度为O(n2)的三种排序算法
1 如何评价.分析一个排序算法? 很多语言.数据库都已经封装了关于排序算法的实现代码.所以我们学习排序算法目的更多的不是为了去实现这些代码,而是灵活的应用这些算法和解决更为复杂的问题,所以更重要的是学 ...
- 三种排序算法python源码——冒泡排序、插入排序、选择排序
最近在学习python,用python实现几个简单的排序算法,一方面巩固一下数据结构的知识,另一方面加深一下python的简单语法. 冒泡排序算法的思路是对任意两个相邻的数据进行比较,每次将最小和最大 ...
- JavaScript新手学习笔记3——三种排序方式(冒泡排序、插入排序、快速排序)
每种编程语言学到数组的时候,都会讲到排序算法,当时学C语言的时候,卡在排序算法.今天来总结一下javascript中如何实现三种排序算法. 1.冒泡排序(默认升序排列哦) 原理: 冒泡排序的原理,顾名 ...
- 模板化的七种排序算法,适用于T* vector<T>以及list<T>
最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...
- 几种排序算法的学习,利用Python和C实现
之前学过的都忘了,也没好好做过总结,现在总结一下. 时间复杂度和空间复杂度的概念: 1.空间复杂度:是程序运行所以需要的额外消耗存储空间,一般的递归算法就要有o(n)的空间复杂度了,简单说就是递归集算 ...
- 秒杀9种排序算法(JavaScript版)
一:你必须知道的 1> JS原型 2> 排序中的有序区和无序区 3> 二叉树的基本知识 如果你不知道上面三个东西,还是去复习一下吧,否则,看下面的东西有点吃力. 二:封装丑陋的原型方 ...
- 学习Java绝对要懂的,Java编程中最常用的几种排序算法!
今天给大家分享一下Java中几种常见的排序算法的Java代码 推荐一下我的Java学习羊君前616,中959,最后444.把数字串联起来! ,群里有免费的学习视频和项目给大家练手.大神有空时也 ...
- C#常用8种排序算法实现以及原理简介
public static class SortExtention { #region 冒泡排序 /* * 已知一组无序数据a[1].a[2].--a[n],需将其按升序排列.首先比较a[1]与a[2 ...
- 用 C 语言描述几种排序算法
排序算法是最基本且重要的一类算法,本文基于 VS2017,使用 C 语言来实现一些基本的排序算法. 一.选择排序 选择排序,先找到数组中最小的元素,然后将这个元素与数组的第一个元素位置互换(如果第一个 ...
随机推荐
- HAproxy负载均衡-ACL篇
ACL定制法则: 开放策略:拒绝所有,只开放已知 拒绝策略:允许所有,只拒绝某些 事实上实现安全策略,无非也就是以上两种方法 redirect 参考:http://cbonte.github.io/h ...
- 数学建模python matlab 编程(椭圆声学原理画图证明,解析几何)
证明,在椭圆形的音乐厅内,从一个椭圆的一个焦点发出声音,则另一个焦点听到的声音是最大的. 分析:证明,从椭圆的一个焦点任意发射的直线经过反射后,并经过另一个焦点. 画图,过一个焦 ...
- 阿里云Centos7挂载数据盘
查看磁盘情况 fdisk -l fdisk /dev/vdb 根据提示,分别输入 n. p. . enter.enter.wq fdisk -l mkfs.ext3 /dev/vdb1 挂载磁盘,写入 ...
- JRebel for IntelliJ
好久没用jrebel了,跟前端进行项目联调总是有些许改动,还是热部署方便. 目前用的idea版本:IntelliJ IDEA 2019.2 JRebel插件版本:JRebel for IntelliJ ...
- charles简明教程
charles是一款强大的抓包软件,他可以帮助开发者制造后端数据也可以帮助测试者抓包分析. 一.电脑上安装charles软件包 charles当然有各个版本,一般选择较新的版本,而不会选择最新的版本. ...
- Kubernetes Dashboard的安装与坑【h】
1.前言 https://github.com/kubernetes/dashboard/releases kubectl apply -f https://raw.githubusercontent ...
- java面试指导2019-9-16
说说List,Set,Map三者的区别? List(对付顺序的好帮手): List接口存储一组不唯一(可以有多个元素引用相同的对象),有序的对象 Set(注重独一无二的性质): 不允许重复的集合.不会 ...
- git 命令 git status add rm commit mv
1.查看 git 仓库文件改动状态 Git 仓库内文件改动有 4 种状态,除了 Unmodified 状态的文件因为并未改动默认没有状态不做显示之外,其他文件改动状态都可以通过 git status ...
- 智能指针分析及auto_ptr源码
简介 C++没有内存自动回收机制,对堆内存的管理就是简单的new和delete,每次new出来的内存都需要手动delete释放.但由于忘记.流程复杂或者异常退出等,都有可能导致没有执行delete释放 ...
- *【Python】【demo实验26】【练习实例】【递归方法的使用】
原题: 利用递归方法求5! 原题给出的解答: #!/usr/bin/python # encoding=utf-8 # -*- coding: UTF-8 -*- # 利用递归方法求5! def fa ...