php之编程思想(冒泡排序法)
定义:
冒泡排序(Bubble Sort):重复走访要排序的数组,一次比较两个元素,如果它们的顺序错误,就把他们交换过来。
走访数组的工作重复进行,直到没有再需要交换的元素,这样改数列就排序完成。
算法思路:
- 比较相邻的两个元素,如果第一个比第二个大,就交换他们两个
- 对每个相邻的的元素做同样的工作,从开始的第一对到结尾的最后一对,这一点,最后的元素应该是最大(如果倒序的话:或者最小);
- 针对所有的元素重复以上工作,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对元素需要比较。
代码:
请根据代码序号来看,从1到4,先从内部for循环开始,再添加外部for循环。每一次内部循环走完全部,外面循环才走一次。
$arr = array(1,2,8,4,9,5,3,10,13,12); $len = count($arr); //4:内部循环一次已经找出最大值,我们需要让前面的值再重复循环对比 for($i = 0; $i < $len; $i++){ //1:让最大的值放到最右边 for($j = 0; $j < $len -1 -$i; $j++){ //2:判断,两两相比 if($arr[$j] > $arr[$j+1]){ //3:左边比右边大:交换 $for = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $for; } } } print_r($arr);
输出结果:
Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 8 [6] => 9 [7] => 10 [8] => 12 [9] => 13 )
for循环原理:
我们来看一下,循环到底是如何先走内部完内部for循环,再走一次外部for循环的。为了方便查看结果,我减少了数组个数。
$arr = array(1,2,8,4,9); //数组段一段方便查看输出 $len = count($arr); //4:内部循环一次已经找出最大值,我们需要让前面的值再重复循环对比 for($i = 0; $i < $len; $i++){ //1:让最大的值放到最右边 for($j = 0; $j < $len -1 -$i; $j++){ //2:判断,两两相比 if($arr[$j] > $arr[$j+1]){ //3:左边比右边大:交换 $for = $arr[$j]; $arr[$j] = $arr[$j+1]; $arr[$j+1] = $for; } echo 'inner for $i: '.$i.'</br>'; echo '------<br/>'; echo 'inner for $j: '.$j.'</br>'; echo '#############</br>'; } echo '<strong>outside for $i:</strong> '.$i.'</br>'; echo '-------------<br/>'; echo '<strong>outside for $j:</strong> '.$j.'</br>'; echo '#############</br>'; } print_r($arr);
输出结果:
第一次外部for循环和第一次内部全部for循环输出结果:
第一次外部for循环$i = 0;内部for循环 $j = 0,1,2,3; 为什么到了外部for循环 $j = 4 ,因为内部循环执行数组长度-1了
inner for $i: 0 ------ inner for $j: 0 ############# inner for $i: 0 ------ inner for $j: 1 ############# inner for $i: 0 ------ inner for $j: 2 ############# inner for $i: 0 ------ inner for $j: 3 ############# outside for $i: 0 ------------- outside for $j: 4
第二次外部for循环和第二次内部全部for循环输出结果:
inner for $i: 1 ------ inner for $j: 0 ############# inner for $i: 1 ------ inner for $j: 1 ############# inner for $i: 1 ------ inner for $j: 2 ############# outside for $i: 1 ------------- outside for $j: 3
第三次外部for循环和第三次内部全部for循环输出结果:
inner for $i: 2 ------ inner for $j: 0 ############# inner for $i: 2 ------ inner for $j: 1 ############# outside for $i: 2 ------------- outside for $j: 2
第四次外部for循环和第四次内部全部for循环输出结果:
inner for $i: 3 ------ inner for $j: 0 ############# outside for $i: 3 ------------- outside for $j: 1 ############# outside for $i: 4 ------------- outside for $j: 0
最后一次内部for循环已经不满足条件走完了,只输出了外部for循环。
如果还有什么不懂的,欢迎留言咨询!!!
我是程序媛willa。

浙公网安备 33010602011771号