冒泡排序指的是依次比较相邻的两个数,然后根据大小做出排序,直至最后两位数。因为在排序的
过程中总是小数放前面,大数放后面,和气泡上升有点类似,所以又称作冒泡排序。
下面通过一个实例看一下如何实现冒泡排序:
/**
冒泡排序算法实例
*/
// 通过一个数组做演示
$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]