面试题详解冒泡排序法

来源:互联网 发布:南风知我意叶小意结局 编辑:程序博客网 时间: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
原创粉丝点击