前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序。

$arr(1,43,54,62,21,66,32,78,36,76,39);

1. 冒泡排序

思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即,每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

代码实现:
$arr=array(1,43,54,62,21,66,32,78,36,76,39);

function bubbleSort($arr)
{  
  $len=count($arr);
  //该层循环控制 需要冒泡的轮数

for($i=1;$i<$len;$i++)
  { //该层循环用来控制每轮 冒出一个数 需要比较的次数

for($k=0;$k<$len-$i;$k++)

{

if($arr[$k]>$arr[$k+1])

{

$tmp=$arr[$k+1];

$arr[$k+1]=$arr[$k];

$arr[$k]=$tmp;

}

}

}
  return $arr;

}

2. 选择排序

思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

代码实现:
function selectSort($arr) {
//双重循环完成,外层控制轮数,内层控制比较次数
 $len=count($arr);
    for($i=0; $i<$len-1; $i++) {

//先假设最小的值的位置

$p = $i;

for($j=$i+1; $j<$len; $j++) {

//$arr[$p] 是当前已知的最小值

if($arr[$p] > $arr[$j]) {

//比较,发现更小的,记录下最小值的位置;并且在下次比较时采用已知的最小值进行比较。
                $p = $j;

}

}

//已经确定了当前的最小值的位置,保存到$p中。如果发现最小值的位置与当前假设的位置$i不同,则位置互换即可。

if($p != $i) {

$tmp = $arr[$p];

$arr[$p] = $arr[$i];

$arr[$i] = $tmp;

}

}

//返回最终结果

return $arr;

}

3.插入排序

思路分析:在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。

代码实现:
function insertSort($arr) {
    $len=count($arr);

for($i=1, $i<$len; $i++) {

$tmp = $arr[$i];

//内层循环控制,比较并插入

for($j=$i-1;$j>=0;$j--) {

if($tmp < $arr[$j]) {

//发现插入的元素要小,交换位置,将后边的元素与前面的元素互换

$arr[$j+1] = $arr[$j];

$arr[$j] = $tmp;

} else {

//如果碰到不需要移动的元素,由于是已经排序好是数组,则前面的就不需要再次比较了。

break;

}

}

}

return $arr;

}

4.快速排序

思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

代码实现:
function quickSort($arr) {
    //先判断是否需要继续进行

$length = count($arr);

if($length <= 1) {

return $arr;

}

//选择第一个元素作为基准

$base_num = $arr[0];

//遍历除了标尺外的所有元素,按照大小关系放入两个数组内

//初始化两个数组

$left_array = array();  //小于基准的

$right_array = array();  //大于基准的

for($i=1; $i<$length; $i++) {

if($base_num > $arr[$i]) {

//放入左边数组

$left_array[] = $arr[$i];

} else {

//放入右边

$right_array[] = $arr[$i];

}

}

//再分别对左边和右边的数组进行相同的排序处理方式递归调用这个函数
   
$left_array = quick_sort($left_array);

$right_array = quick_sort($right_array);

//合并

return array_merge($left_array, array($base_num), $right_array);

}

PHP实现四种基本排序算法的更多相关文章

  1. php四种基础排序算法的运行时间比较

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  2. PHP四种基本排序算法

    PHP的四种基本排序算法为:冒泡排序.插入排序.选择排序和快速排序. 下面是我整理出来的算法代码: 1. 冒泡排序: 思路:对数组进行多轮冒泡,每一轮对数组中的元素两两比较,调整位置,冒出一个最大的数 ...

  3. php四种基础排序算法的运行时间比较!

    /** * php四种基础排序算法的运行时间比较 * @authors Jesse (jesse152@163.com) * @date 2016-08-11 07:12:14 */ //冒泡排序法 ...

  4. PHP 四种基本排序算法的代码实现

    前提:分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思 ...

  5. PHP——四种基本排序算法

    分别用冒泡排序法,快速排序法,选择排序法,插入排序法将下面数组中的值按照从小到大的顺序进行排序. $arr(1,43,54,62,21,66,32,78,36,76,39); 1. 冒泡排序 思路分析 ...

  6. PHP实现四种基本排序算法 得多消化消化

    1.冒泡排序 // 冒泡排序 思路分析:在要排序的一组数中,对当前还未排好的序列,从前往后对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒.即,每当两相邻的数比较后发现它们的排序与排序 ...

  7. php 四种基本排序算法

    冒泡排序 思路分析:法如其名,就是像冒泡一样,每次从数组当中 冒一个最大的数出来. 第一轮:从第一个到最后一个冒泡比较,运行结果:最后一个最大 第二轮:从第一个到倒数第二个冒泡比较, 运行结果:最后一 ...

  8. 笔试算法题(53):四种基本排序方法的性能特征(Selection,Insertion,Bubble,Shell)

    四种基本算法概述: 基本排序:选择,插入,冒泡,希尔.上述算法适用于小规模文件和特殊文件的排序,并不适合大规模随机排序的文件.前三种算法的执行时间与N2成正比,希尔算法的执行时间与N3/2(或更快)成 ...

  9. 七种经典排序算法及Java实现

    排序算法稳定性表示两个值相同的元素在排序前后是否有位置变化.如果前后位置变化,则排序算法是不稳定的,否则是稳定的.稳定性的定义符合常理,两个值相同的元素无需再次交换位置,交换位置是做了一次无用功. 下 ...

随机推荐

  1. 浅谈php生成静态页面

    一.引 言 在速度上,静态页面要比动态页面的比方php快很多,这是毫无疑问的,但是由于静态页面的灵活性较差,如果不借助数据库或其他的设备保存相关信息的话,整体的管理上比较繁琐,比方修改编辑.比方阅读权 ...

  2. Pyhont-Urllib

    urllib 方法 1 httpContent=urllib.urlopen(url) 2 fileName, httpContent= urllib.urlretrieve(url, filePat ...

  3. nginx 报错 HTTP ERROR 500 (PHP数组简写模式)

    同样的代码放在Apache上执行可以执行,在nginx上面就报错了. 百度出来一堆结果貌似都不对,然后只有注释代码->运行程序,一步步找到问题所在 $buffer = []; 这一步报错了 原来 ...

  4. Leetcode 254. Factor Combinations

    Numbers can be regarded as product of its factors. For example, 8 = 2 x 2 x 2; = 2 x 4. Write a func ...

  5. a版本冲刺第一天

    队名:Aruba   队员: 黄辉昌 李陈辉 林炳锋 鄢继仁 张秀锋 章  鼎 学号 昨天完成的任务 今天做的任务 明天要做的任务 困难点 体会 408 学习测试文档的编写 继续学习并借鉴,开始着手写 ...

  6. php无法创建中文名的文件

    需要使用iconv强制转换后才可以.

  7. 刚开始用git遇到的无法提交变更的问题

    原来我在目录里打开命令行,git bash默认执行的目录是c:/users了,错误的使用了git init,把$HOME 路径下的所有文件载入 git 仓库了,删除$HOME 路径下的".g ...

  8. bootstrap 水平表单

    <form class="form-horizontal" role="form"> <div class="form-group& ...

  9. EF唯一索引

    this.Property(p => p.Name) .IsRequired() .HasMaxLength()) .HasColumnAnnotation("Index", ...

  10. Coursera-Getting and Cleaning Data-Week2-课程笔记

    Coursera-Getting and Cleaning Data-Week2 Saturday, January 17, 2015 课程概述 week2主要是介绍从各个来源读取数据.包括MySql ...