1 冒泡排序

<?php
/**
 * 冒泡排序(从小到大)
 * 基本思想:两两比较相邻记录,一次循环确定一个数
 * 在所有的排序算法中是最慢的,尤其当数据量较大的时候,数据小体现不出来
 */
$arr = array(21, 95, 82, 15, 36);
function bubbleSort(&$arr)
{
	$num = count($arr);	//元素数据个数
	for($i = 0; $i < $num-1; ++$i)
	{
		for($j = 0; $j < $num-1-$i; ++$j)
		{
			if($arr[$j] > $arr[$j+1]) {	//如果前面的数大于后面的数,交换位置
				$temp = $arr[$j];
				$arr[$j] = $arr[$j+1];
				$arr[$j+1] = $temp;
			}
		}
	}
}
bubbleSort($arr);	//调用函数
echo '<pre>';
var_dump($arr);	//输出排序后的数组

2 选择排序

<?php
/**
 * 选择排序(从小到大)
 * 基本思想:选择,顾名思义,先选择(找到)合适的数据,然后进行交换。
 * 对于本例,首先在先假设第0个元素为最小值,然后与第1到第n-1个数据依次比较,其中最小的值与第0个元素的值进行交换
 */
$arr = array(21, 95, 82, 15, 36);
function selectSort(&$arr)
{
	$num = count($arr);	//元素数据个数
	for($i = 0; $i < $num-1; ++$i)	//大循环的次数
	{
		$min_value = $arr[$i];	//既然要先检索出最小值,这个最小值怎么确定?我们先假设一个值,这个值是有规律可循的
		$min_index = $i;
		for($j = $i+1; $j <= $num-1; ++$j)
		{
			if($min_value > $arr[$j])	//如果假定的最小值还大于后续其他数据,则交换位置
			{
				$min_value = $arr[$j];
				$min_index = $j;
			}
		}	//每一次循环结束都会确定一个本次循环真正的最小值
		$arr[$min_index] = $arr[$i];	//真正的最小值所在位置替换为假定的最小值
		$arr[$i] = $min_value;	//假定的最小值替换为真正的最小值
	}
}
selectSort($arr);	//将需要排序的数组传入
echo '<pre>';
var_dump($arr);	//输出排序后的数组

3 插入排序

<?php
/**
 * 选择排序(从小到大)
 * 基本思想:类似扑克插牌,以一个(多个)数据为基准,往后每摸一张牌,与以前的数据依次比较大小,然后有序插入
 */
$arr = array(21, 95, 82, 15, 36);
$arr = array(21, 14);
function insertSort(&$arr)
{
	$num = count($arr);
	for($i = 1; $i < $num; ++$i)
	{	//我们知道,数组的第0个元素是不用进行排序的,所以需要给$num-1个数据进行排序
		$insert_value = $arr[$i];	//先把需要插入的数据记录下来
		$compare_index = $i-1;	//先假设与插入数据比较的数据的下标为前一个元素的下标
		while($arr[$compare_index] > $insert_value && $compare_index >= 0)	//如果,比较的数据大于插入的数据
		{
			$arr[$compare_index + 1] = $arr[$compare_index];	//把比较的元素放后面,此时compare_index+1和compare_index的位置为同一值
			--$compare_index;	//比较的元素下标-1
		}
		$arr[$compare_index + 1] = $insert_value;	//当推出循环,证明比较的数据小于插入的数据,所以,$compare+1位置就是插入位置
	}
}

insertSort($arr);	//传入数组进行排序
echo '<pre>';
var_dump($arr);	//输出数组

PHP的基本排序算法的更多相关文章

  1. JavaScript实现常用的排序算法

    ▓▓▓▓▓▓ 大致介绍 由于最近要考试复习,所以学习js的时间少了 -_-||,考试完还会继续的努力学习,这次用原生的JavaScript实现以前学习的常用的排序算法,有冒泡排序.快速排序.直接插入排 ...

  2. 排序算法----基数排序(RadixSort(L))单链表智能版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  3. 常见排序算法(附java代码)

    常见排序算法与java实现 一.选择排序(SelectSort) 基本原理:对于给定的一组记录,经过第一轮比较后得到最小的记录,然后将该记录与第一个记录的位置进行交换:接着对不包括第一个记录以外的其他 ...

  4. 几大排序算法的Java实现

    很多的面试题都问到了排序算法,中间的算法和思想比较重要,这边我选择了5种常用排序算法并用Java进行了实现.自己写一个模板已防以后面试用到.大家可以看过算法之后,自己去实现一下. 1.冒泡排序:大数向 ...

  5. 排序算法----基数排序(RadixSort(L,max))单链表版本

    转载http://blog.csdn.net/Shayabean_/article/details/44885917博客 先说说基数排序的思想: 基数排序是非比较型的排序算法,其原理是将整数按位数切割 ...

  6. 排序算法汇总(C/C++实现)

    前言:     本人自接触算法近2年以来,在不断学习中越多地发觉各种算法中的美妙.之所以在这方面过多的投入,主要还是基于自身对高级程序设计的热爱,对数学的沉迷.回想一下,先后也曾参加过ACM大大小小的 ...

  7. 用Java来写常见的排序算法

    随着校招的临近 算法是校招中很重要的一个部分 总结了常见几种排序算法,各种算法的时间复杂度和空间复杂度大家也需要多了解下 package com.huwei.sort; /** * 各种排序算法 * ...

  8. 模板化的七种排序算法,适用于T* vector<T>以及list<T>

    最近在写一些数据结构以及算法相关的代码,比如常用排序算法以及具有启发能力的智能算法.为了能够让写下的代码下次还能够被复用,直接将代码编写成类模板成员函数的方式,之所以没有将这种方式改成更方便的函数模板 ...

  9. 排序算法总结第二弹----冒泡排序---javascript描述

    上篇博文总结了选择排序,这篇来看冒泡排序,接上篇. 冒泡排序思想:若是正再将一组数据升序排序, 第一趟:比较相邻的数据,当左侧值大于右侧值将他们进行交换,将较小值向前浮动,大值向后冒泡,直至比较到最后 ...

  10. 排序算法总结------选择排序 ---javascript描述

    每当面试时避不可少谈论的话题是排序算法,上次面试时被问到写排序算法,然后脑袋一懵不会写,狠狠的被面试官鄙视了一番,问我是不是第一次参加面试,怎么可以连排序算法都不会呢?不过当时确实是第一次去面试,以此 ...

随机推荐

  1. Java被忽略的基本知识(四)

    Java IO(不是一般的重要) 54.IO中的流:字节流(InputStream.OutputStream).字符流(Reader.Writer).转换流(InputStreamReader.Out ...

  2. 1.NoSql简介

    NoSQL,指的是非关系型的数据库.随着互联网web2.0网站的兴起,传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不从心,暴露了很多难以 ...

  3. iOS 开发:利用第三方插件来安装CoCoapods

    引言:通过上一篇博客我们知道了怎么样去通过终端来安装CoCoapods,这一篇我们着重与用第三方插件来安装CoCoapods: 1. 首先在提下链接下载插件 https://github.com/ka ...

  4. 夺命雷公狗-----React_native---4---初始化项目

    我们首先在android目录下创建一个apps的文件夹: 然后我们在apps目录下,按住shift键加鼠标右键选择--在此打开命令窗口输入命令初始化项目 然后就是等了................. ...

  5. Hash工具下载地址

    因为经常要在非常用电脑使用,这里放一个链接,方便下载: http://files.cnblogs.com/files/cxun/Hash.zip HASH计算工具,可计算MD5.SHA-1.CRC32 ...

  6. nodejs的初学

    1.启服务器.先server.js,再命令行输入命令node server.js,打开浏览器输入http://127.0.0.1:2016可以看到有内容输出. server.js代码如下: var h ...

  7. 马士兵Java视频教程 —— 学习顺序

    第一部分:J2se学习视频内容包括: 尚学堂科技_马士兵_JAVA视频教程_JDK5.0_下载-安装-配置 尚学堂科技_马士兵_JAVA视频教程_J2SE_5.0_第01章_JAVA简介_源代码_及重 ...

  8. [解决方案]vs2015无法解析外部符号__imp__fprintf和__imp____iob_func

    转自:http://www.cnblogs.com/ubosm/p/5444919.html 使用vs2015编译ffmpeg的一个小项时,出现了__imp__fprintf和__imp____iob ...

  9. Thinkphp学习回顾(一)之基本结构目录

    TP框架的学习一般都是从了解框架的基本结构开始的,每个文件都有其专属的作用,我的TP框架的回顾也从基本结构开始讲起. 一.ThinkPHP的获取 http://www.thinkphp.cn   这是 ...

  10. [ASM C/C++] C语言函数的可选性自变量

        函数的可选性自变量  C语言允许定义自变量数量可变的函数,称为variadic函数.variadic函数需要固定数目的强制性自变量,后面是数量可变的可选性自变量. 也就是说必须至少有一个强制性 ...