zoukankan      html  css  js  c++  java
  • PHP 冒泡排序(Bubble Sort)

    冒泡排序指的是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。因为在排序的

    过程中总是小数放前面,大数放后面,和气泡上升有点类似,所以又称作冒泡排序。

    下面通过一个实例看一下如何实现冒泡排序:

    /**
     冒泡排序算法实例
     */
     
    // 通过一个数组做演示
    $demo_array = array(33,25,43,75,1,2,6,3,11,5,20,32,65);
    
    for($i = 0;$i < count($demo_array); $i++) {
    	for($j = $i + 1;$j < count($demo_array); $j++) {
    		// 比较数组中相邻两个数值的大小
    		if($demo_array[$i] < $demo_array[$j]) {
    			// 互换变量
    			$tmp = $demo_array[$i];
    			$demo_array[$i] = $demo_array[$j];
    			$demo_array[$j] = $tmp;
    		}
    	}
    }
    
    var_dump($demo_array);

    运行结果:

    array (size=13)
      0 => int 75
      1 => int 65
      2 => int 43
      3 => int 33
      4 => int 32
      5 => int 25
      6 => int 20
      7 => int 11
      8 => int 6
      9 => int 5
      10 => int 3
      11 => int 2
      12 => int 1
    

    从上面的结果中,我们可以看到,数组中的键值顺序已经发生变化,排序成功。

    仔细看上面的代码,我们发现关键的一步就是互换变量,这个也是冒泡排序的核心要点。我们现在把

    这一块单独拿出来通过下面示例看一下。

    示例:现在有两个变量,$A = 3、$B = 5,我们的需求是将这两个变量互换,使得 $A = 5、$B。

    这就像是我们有两瓶水,我想把 A 中的水倒入 B 中,把 B 中的水倒入 A 中,那么此时我们就会引入第

    三个空瓶子 C,充当一个暂存的作用

    $C = $A; // 将 A 中的水倒入 C ,此时 A 为空瓶
    $A = $B; // 将 B 中的水倒入A,此时 B为空瓶
    $B = $C;//将 C(A) 中的水倒入 B,互换成功
    

    总结:

    所以,关于冒泡排序的关键点就两个:

    1.循环比较

    2.互换键值

    -------------------------------------------------------------------手动分割线--------------------------------------------------------

    2018/10/15 更新

    Go 语言版的冒泡排序,原理是一样的,代码如下:

    package main
    
    import (
    	"fmt"
    )
    
    // 数组 array
    func main() {
    	// go 语言版的冒泡排序
    	array_demo := [...]int{33, 25, 43, 75, 1, 2, 6, 3, 11, 5, 20, 32, 65}
    	array_len := len(array_demo)
    
    	for i := 0; i < array_len; i++ {
    		for j := i + 1; j < array_len; j++ {
    			// 比较相邻两个数的大小
    			if array_demo[i] < array_demo[j] {
    				tmp := array_demo[i]
    				array_demo[i] = array_demo[j]
    				array_demo[j] = tmp
    			}
    		}
    	}
    
    	fmt.Println(array_demo)
    }
    

    运行结果如下:

    [ `go run arr.go` | done: 1.433s ]
    	[75 65 43 33 32 25 20 11 6 5 3 2 1]
    

      

  • 相关阅读:
    linux centos7 安装mysql-5.7.17教程(图解)
    java中equals,hashcode和==的区别
    常用正则表达式大全
    MyEclipse中的重命名
    MyEclipse中查询
    Java中的代理模式
    Java中的枚举
    Java中的异常-Throwable-Error-Exception-RuntimeExcetpion-throw-throws-try catch
    eclipse将编辑栏一分为二
    图的存储,搜索,遍历,广度优先算法和深度优先算法,最小生成树-Java实现
  • 原文地址:https://www.cnblogs.com/leeyongbard/p/9790739.html
Copyright © 2011-2022 走看看