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]

  

posted @ 2018-10-15 14:18  流光瞬息  阅读(1202)  评论(0编辑  收藏  举报