问题描述
用 PHP 实现起泡排序
给定:$array = [100, 5, 25, 29, 11, 65, 33, 22, 68, 19];
结果:$array = [5, 11, 19, 22, 25, 29, 33, 65, 68, 100];
代码实现
该算法详解请看:《C++ 数据结构 (二) 向量 (7) 起泡排序》
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
function bubble(array &$A, int $lo, int $hi) {
$last = $lo; // 记录最后一组逆序对位置
while (++$lo < $hi) { // 遍历 [$lo, $hi) 内所有元素
if ($A[$lo - 1] > $A[$lo]) { // 若逆序
$last = $lo; // 记录逆序对位置
// 交换位置
$temp = $A[$lo - 1];
$A[$lo - 1] = $A[$lo];
$A[$lo] = $temp;
}
}
// 返回最后一组逆序对位置,[$lo, $last) 不一定有序,[$last, $hi) 必然有序
return $last;
}
function bubbleSort(array &$A, int $lo, int $hi) {
// 将 $last 赋值给 $hi,则接下来只排序 [$lo, $last) 内的元素
while ($lo < ($hi = bubble($A, $lo, $hi)));
}
$A = [100, 5, 25, 29, 11, 65, 33, 22, 68, 19];
bubbleSort($A, 0, count($A));
for ($i = 0; $i < count($A); $i++) {
echo "{$A[$i]} ";
}
本文由
Oscaner
创作, 采用
知识共享署名4.0
国际许可协议进行许可
本站文章除注明转载/出处外, 均为本站原创或翻译, 转载前请务必署名