面试题详解冒泡排序法
来源:互联网 发布:南风知我意叶小意结局 编辑:程序博客网 时间:2024/06/05 18:15
小弟学过c语言的基础,在做php的开发。和各位大神是不可以比拟。
但是最近看了一些面试题,也根据自己的经验,把面试题中的一些要写的代码写在bolg方便新手和需要的同学么学习探讨。
今天就是php的数组的冒泡排序:
$mynumber=array(10,5,17,3,1,4,77,99,23,21);function Msort(array $number){ $sum=count($number); for($i=0;$i<$sum;$i++){ for($j=0;$j<$sum-$i-1;$j++){ if($number[$j]>$number[$j+1]){ $lishi=$number[$j]; $number[$j]=$number[$j+1]; $number[$j+1]=$lishi; } } } return $number;}print_r(Msort($mynumber));
解析一下我的这段代码。首先先要理解冒泡排序,假设有10个人,年龄不同要给他们排个大小怎么办。
冒泡,就是让这10个人拍成一排,将第一人的岁数于第二人相比,若前者大于后者则交换位置。这样
第一轮下来排在最后一个的必然是年龄最大的。接下来第二轮一样画葫芦只不过可以少比一次就是在
最后一个人这边不用再比。
来看下每一轮比较的次数:
第一轮比较9次
第二轮比较8次
.
.
.
第八轮比较2次
第九轮比较1次
第十轮比较0次
从这个规律我们可以看出,需要些两个循环,还需要一个排大小的过程。
for($i=0;$i<$sum;$i++){ for($j=0;$j<$sum-$i-1;$j++){这边解释一下这两个循环,第一个循环,$sum,数组的个数,数组下标从零开始。假设数组是10个元素就像10个老头。从0开始
循环到9就是10轮。第二个循环是每轮比较的次数,第一轮比较9次,第二轮是8次由此可以看出这个条件就是$sum-$i-1这边为
什么减$i因为每比一轮就有一个人是不需要再比的。减一是因为两两相比3人比两次,4人比3次可以看出次数比人数少一次。
if($number[$j]>$number[$j+1]){ $lishi=$number[$j]; $number[$j]=$number[$j+1]; $number[$j+1]=$lishi; }这一段的代码就是比较的抽象。
1号老头如果大于2号老头的年龄这里不考虑相等,当让相等时不会换位置的。从判断也可以看出。
1,2号老头未知互换。这样就保证第一轮年纪最大的老头到了最后。
如果要说效率的问题的话确实最后一轮没有比的必要因为只有一个人。
或许可以把
for($i=0;$i<$sum;$i++){改成
for($i=0;$i<$sum-1;$i++){
0 0
- 面试题详解冒泡排序法
- 面试题---冒泡排序
- 冒泡排序--面试题
- 【面试题】冒泡排序&快速排序
- 快速排序与冒泡排序(面试题)
- 快速排序与冒泡排序(面试题)
- java面试题——冒泡排序
- (程序员面试题)冒泡排序
- java基础面试题:冒泡排序
- 面试题常碰到,java冒泡排序
- 面试题:链表插入排序、冒泡排序
- 面试题:冒泡排序,选择排序,插入排序,快速排序,归并排序,堆排序
- 基于visual Studio2013解决面试题之1401冒泡排序
- java面试题7--数组高级-冒泡排序
- C#M面试题之——冒泡排序
- 经典面试题之 —— 冒泡排序
- 数据结构 - 冒泡排序法详解
- JAVA面试题之冒泡排序,插入排序及选择排序
- Linux命令---sync
- viewholder 封装
- 某缓存系统采用LRU淘汰算法,假定缓存容量为4,并且初始为空,那么在顺序访问以下数据项的时候,1、5、1、3、5、2、4、1、2,出现缓存直接命中的次数是(),最后缓存中即将准备淘汰的数据项是()
- Linux 操作MySQL常用命令总结
- js中文转Unicode编码与解码
- 面试题详解冒泡排序法
- Yii 1.0 数据库操作 增、删、改、查 、对象转数组
- Java ArrayList遍历时删除一个元素
- 使用 PureMVC 和 Cocos2d-js 构建游戏项目
- SQLSERVER更新日期字段里的一部分
- 学习JVM--垃圾回收(二)GC收集器
- 记录一次 Mysql 死锁排查过程
- elasticsearch5.2.1安装head步奏
- 6.5、currentMember、properties、IIF、existing