zoukankan      html  css  js  c++  java
  • 冒泡排序法原理讲解及PHP代码示例

    冒泡排序原理

    冒泡排序对一个数组里的数字进行排序,把数组里两个相邻的数比较大小,将值小的数放在前面,把大的数往后面放,当然这种排序是升序,即从小到大。
    举例说明
    $array = [64, 56, 31, 68, 6];
    数组中有五个元素,按照原理说法,再详细说一下做几轮比较和比较的细节。
    第一轮[64, 56, 31, 68, 6]:
    第一次比较是拿64和56比较,也就是$array[0] 和 $array [1] 比较,因为64比56大,那么56放在前面,64放在后面,结果为 [56, 64, 31, 68, 6]
    第二次比较是拿64和31比较,也就是$array[1] 和 $array [2] 比较,因为64比31大,那么31放在前面,64放在后面,结果为 [56, 31, 64, 68, 6]
    第三次比较是拿64和68比较,也就是$array[2] 和 $array [3] 比较,因为68比64大,那么64保持在前,68保持在后,结果为 [56, 31, 64, 68, 6]
    第四次比较是拿68和6比较 ,也就是$array[3] 和 $array [4] 比较,因为68比6 大,那么6放在前面, 68放在前面,结果为 [56, 31, 64, 6, 68]
     
    到此,第一轮比较结束,从最后的结果里[56, 31, 64, 6, 68]看出,并没有按照从小到大的结果排列,但是68作为数组里最大的值,已经放到了最后面,我们下次排序是不是可以不管最后一个数了?
    由此可想而知,第二轮就少了一次比较,也就是三次就可以了,以此推理,比较的次数越来越少。

    第二轮[56, 31, 64, 6, 68]:
    第一次比较是拿56和31比较,也就是$array[0] 和 $array [1] 比较,因为56比31大,那么31放在前面,56放在后面,结果为 [31, 56, 64, 6, 68]
    第二次比较是拿56和64比较,也就是$array[1] 和 $array [2] 比较,因为64比56大,那么56保持在前,64保持在前,结果为 [31, 56, 64, 6, 68]
    第三次比较是拿64和6 比较,也就是$array[2] 和 $array [3] 比较,因为64比6 大,那么6 放在前面,64放在后面,结果为 [31, 56, 6, 64, 68]

    到此,结果为[31, 56, 6, 64, 68],继续~

    第三轮[31, 56, 6, 64, 68]:
    第一次比较是拿56和31比较,也就是$array[0] 和 $array [1] 比较,因为56比31大,那么31保持在前,56保持在前,结果为 [31, 56, 6, 64, 68]
    第二次比较是拿56和6 比较,也就是$array[1] 和 $array [2] 比较,因为56比 6大,那么 6放在前面,56放在后面,结果为 [31, 6, 56, 64, 68]

    到此,结果为[31, 6, 56, 64, 68],继续~

    第四轮[31, 6, 56, 64, 68]:
    最后一次比较是拿31和6比较,也就是$array[0] 和 $array [1] 比较,因为31比6大,那么6放在前面,31放在后面,结果为 [6, 31, 56, 64, 68]
     
    到此,结果为[6, 31, 56, 64, 68],结束~
      

    仔细观察下,5个元素的数组。比较了四轮,并且每轮比较的次数是逐渐减少的(-1)。对此我们可以用两层循环即可完成,外层循环控制循环轮次,内层循环控制每轮的比较次数。

    代码

    <?php
    //从小到大排序
    function sort_arr($array){
       $count = count($array);
           $temp = 0;  //临时变量声明
           for($i = 0; $i < $count - 1; $i ++) {  //控制轮数
             for($j = 0; $j < $count - 1 - $i; $j ++) {  //控制每轮次数
               if ($array[$j] > $array[$j +1]) {
                    $temp = $array[$j];  //临时变量存放
                    $array[$j] = $array[$j + 1]; //交换位置
                    $array[$j + 1] = $temp;    //交换位置
               }
             }
           }
           return $array;
    }
    
    $array = [64, 56, 31, 68, 6];
    print_r( sort_arr($array) );
    Array
    (
        [0] => 6
        [1] => 31
        [2] => 56
        [3] => 64
        [4] => 68
    )
  • 相关阅读:
    Verilog之阻塞赋值非阻塞赋值
    Verilog之case语句
    Verilog 分频器
    kvm虚拟化存储管理(3)
    kvm虚拟机管理(2)
    Kvm 虚拟化介绍(1)
    云计算 大数据 人工智能
    openstack核心组件——cinder存储服务(11)
    openstack核心组件——horizon Web管理界面(10)
    openstack核心组件——neutron网络服务 抓取ip(9)
  • 原文地址:https://www.cnblogs.com/wt645631686/p/6867870.html
Copyright © 2011-2022 走看看