上一篇我们学习了插入类相关的两种排序。不过,和交流班那种比起来,他们还真的只是小弟而已。甚至可以说,在所有的排序算法中,最著名的两种排序就是今天要介绍的交换排序。不管是冒泡排序还是快速排序,都是面试中常见的排序算法。它们有多常见?每当你学习数据结构和算法的时候,即使你根本没有学过,你也会或多或少听说过这两种排序算法。而一些大中型公司直接在面试题中表示不使用这两种算法来实现一些排序题。为什么是这样?当然,也是因为这两个算法太出名了,很多人都能手写出来。当然,不管你面试的公司有什么要求,只要是有志于编程开发??行业发展的同学,冒泡和快排肯定会是面试中绕不开的一道坎。今天就来好好了解一下这两种排序算法。但首先,有必要了解这个“交换”指的是什么。上一篇文章中的插入排序指的是直接将数据插入到指定位置。exchange的意思就是让两个位置的数据经过比较后可以直接交换。比如我们有一个数组[3,1,2],需要按照[1,2,3]的形式排列。那么我们可以先比较3和1,发现1比较小,所以交换3和1的位置,结果就是[1,3,2]。然后比较3和2,发现2小,交换位置,结果就是[1,2,3]的数组。当然,这个例子只是简单说明交换排序的原理。但一切都保持不变。无论是冒泡还是快速排序,它们的基本原理和核心思想都是一样的。对比两个数据后,按规则交换位置。其实从代码中我们可以快速判断出一段排序代码是不是交换排序,也就是它们对于两个元素会有一个数据交换的过程,一般情况下往往会用到一个中间变量。一会儿我们看代码就可以看出这一点。冒泡排序冒泡排序,首先从名字上理解,它的意思就是让数据像苏打水中的气泡一样,一个一个的往上浮。直接上代码看看,代码其实很简单。函数BubbleSort($numbers){$n=count($numbers);for($i=0;$i<$n-1;$i++){//外循环n-1for($j=0;$j<$n-$i-1;$j++){//内循环n-1-iif($numbers[$j]>$numbers[$j+1]){//两两比较交换$temp=$numbers[$j+1];$数字[$j+1]=$数字[$j];$numbers[$j]=$temp;}}}print_r($numbers);}BubbleSort($numbers);//数组//(//[0]=>13//[1]=>27//[2]=>38//[3]=>49//[4]=>49//[5]=>65//[6]=>76//[7]=>97//)光看不太好理解自己编码推演,所以还是用上了终极杀器,也就是图解步骤来看看吧!正如您在代码中看到的,我们有两层循环。所以这张图我们也展示了i和j的两层循环。当然,限于篇幅,我们只展示了第一个i循环里面的j循环,也就是当i=0时,里面的j循环的执行。i=0是,内部j
