毕竟,王老师那是见得多了,区区冒泡就敢来装高端搞大新闻?回家再修炼两年吧。
这不是特么废话么,哪个排序算法不是这么干的?
- 然后,我们将min_index索引位置上的数字(第一轮其实就是A)依次(开始内循环)和剩余其他所有数字比较大小,如果基准数比某数字大了,那么(注意了⚠️⚠️⚠️)我们将某数字所在的数组索引位置赋值给min_index
- 然后,现在最小值俨然已经发生了变化,然后循环继续重复前两个步骤一直到本轮终止结束
不管你能不能看得懂我画的啥意思,反正我强烈你一定要画一画,纸笔演练:
function bubble( $arr ){
$length = count( $arr );
$flag = true;
for( $outer = 0; $outer < $length && $flag; $outer++ ){
$flag = false;
for( $inner = $length - 1; $inner > $outer; $inner-- ){
if( $arr[ $inner ] < $arr[ $inner - 1 ] ){
$temp = $arr[ $inner ];
$arr[ $inner ] = $arr[ $inner - 1 ];
$arr[ $inner - 1 ] = $temp;
$flag = true;
}
}
}
}
$length = count( $arr );
for( $outer = 0; $outer < $length - 1; $outer++ ){
$min_index = $outer;
for( $inner = $outer + 1; $inner < $length; $inner++ ){
if( $arr[ $min_index ] > $arr[ $inner ] ){
$min_index = $inner;
}
}
if( $min_index != $outer ){
$temp = $arr[ $outer ];
$arr[ $outer ] = $arr[ $min_index ];
$arr[ $min_index ] = $temp;
}
}
return $arr;
for( $i = 0; $i < $length; $i++ ){
$arr[] = mt_rand( 1,1000);
}
// 冒泡算法
$begin = microtime( true );
for( $i = 0; $i < $length; $i++ ){
bubble( $arr );
}
$end = microtime( true );
echo PHP_EOL.PHP_EOL.PHP_EOL."冒泡算法耗费时间:".( $end - $begin ).PHP_EOL;
// 选择算法
$begin = microtime( true );
for( $i = 0; $i < $length; $i++ ){
select( $arr );
}
$end = microtime( true );
运行结果如下图所示: