博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒泡排序(优化版)和快速排序
阅读量:5077 次
发布时间:2019-06-12

本文共 1691 字,大约阅读时间需要 5 分钟。

冒泡排序原版

分别使用usort和冒泡排序对数组按name的字符串长度排序

$arr = array(    array('id' => 0, 'name' => '123833'),    array('id' => 0, 'name' => 'aaa'),    array('id' => 0, 'name' => 'albabaababa'),    array('id' => 0, 'name' => '12356'),    array('id' => 0, 'name' => '123abc'));//自定义排序usort对数组排序function cmp($a,$b){     //$a,$b为数组的值两两进行比较    $a = strlen($a['name']);    $b = strlen($b['name']);    if($a == $b) return 0;        return $a<$b ? -1 : 1;   //返回-1则交换顺序}usort($arr,"cmp");     //自定义排序,此处函数cmp需要加"",否则报错,不能写成cmp().//冒泡排序法for($i=0; $i
strlen($arr[$j+1])){ $tmp=$arr[$j]; $arr[$j]=$arr[$j+1]; $arr[$j+1]=$tmp; } }}echo "
";print_r($arr);echo "
";

 

冒泡排序优化版

原始的冒泡排序相对而言是非常耗时的,即使一个数组经过几轮交换已经变的有序了,例如[2,1,3,4,5,6,7]这个数组,经过第一轮,已经变成有序的了,但顽固的冒泡还是要继续进

没有营养的两两比较,从而牺牲了时间。

如果用一个flag来判断一下,当前数组是否已经有序,如果有序就退出循环,这样可以明显的提高冒泡排序的表现~

由于冒泡排序的时间复杂度为O(n*n)所以当数据越多的时候,越慢,非常不适合大数据的排序。

 

function bubbleSort($arr){    $flag = true;    $count = count($arr);    for($i=0;$i<$count-1&&$flag;$i++){        $flag = false;        for($j=$count-1;$j>$i;$j--){ //和($j=0;$j<$count-$i-1;$j++)相同            if($arr[$j] < $arr[$j-1]){                $flag = true;                $tmp = $arr[$j];                $arr[$j] = $arr[$j-1];                $arr[$j-1] = $tmp;            }        }    }    return $arr;}

 

 

 

 

快速排序

取第一个值与其他值进行比较,小的放在这个值的左边,大的放在这个值的右边,然后按照这个方式递归,退出递归的条件是数组的个数<=1。

 

function quicksort($arr){    //如果个数不大于一,直接返回,退出循环的条件    if (count($arr)<=1) {        return $arr;    }    $val = $arr[0]; //取一个值,稍后用来比较    $left = $right = [];    //比$key大的放在右边,小的放在左边,注意循环从1开始,从0开始的话会一直循环,造成Segmentation fault    for($i=1;$i

 

 

 

 

转载于:https://www.cnblogs.com/leezhxing/p/3416262.html

你可能感兴趣的文章
基本封装方法
查看>>
bcb ole拖拽功能的实现
查看>>
生活大爆炸之何为光速
查看>>
bzoj 2456: mode【瞎搞】
查看>>
[Typescript] Specify Exact Values with TypeScript’s Literal Types
查看>>
[GraphQL] Reuse Query Fields with GraphQL Fragments
查看>>
Illustrated C#学习笔记(一)
查看>>
理解oracle中连接和会话
查看>>
两种最常用的Sticky footer布局方式
查看>>
Scrapy实战篇(三)之爬取豆瓣电影短评
查看>>
HDU 5510 Bazinga KMP
查看>>
[13年迁移]Firefox下margin-top问题
查看>>
Zookeeper常用命令 (转)
查看>>
Java程序IP v6与IP v4的设置
查看>>
RUP(Rational Unified Process),统一软件开发过程
查看>>
数据库链路创建方法
查看>>
Enterprise Library - Data Access Application Block 6.0.1304
查看>>
重构代码 —— 函数即变量(Replace temp with Query)
查看>>
Bootstrap栅格学习
查看>>
程序员的数学
查看>>