冒泡排序是非常容易理解和实现,以从小到大排序举例:
设长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。
方案一:
<?php
function bubble1_sort($array)
{
$count = count($array);
if ($count <= 1) {
return $array;
}
for ($i = 0; $i < $count; $i++) {
for ($j = 0; $j < $count; $j++) {
if ($array[$i] < $array[$j]) {
$temp = $array[$i];
$array[$i] = $array[$j];
$array[$j] = $temp;
}
}
}
return $array;
}方案二:
<?php
function bubble2_sort($array)
{
$count = count($array);
if ($count <= 1) {
return $array;
}
for ($i = 0; $i < $count; $i++) {
for ($j = 1; $j < $count - $i; $j++) {
if ($array[$j - 1] > $array[$j]) {
$temp = $array[$j - 1];
$array[$j - 1] = $array[$j];
$array[$j] = $temp;
}
}
}
return $array;
}方案三:
设置一个标志,如果这一趟发生了交换,则为true,否则为false。明显如果有一趟没有发生交换,说明排序已经完成。
<?php
function bubble3_sort($array)
{
$count = count($array);
if ($count <= 1) {
return $array;
}
$flag = true;
$j = $count;
while ($flag) {
$flag = false;
for ($i = 1; $i < $j; $i++) {
if ($array[$i - 1] > $array[$i]) {
$temp = $array[$i - 1];
$array[$i - 1] = $array[$i];
$array[$i] = $temp;
$flag = true;
}
}
$j--;
}
return $array;
}方案四:
如果有100个数的数组,仅前面10个无序,后面90个都已排好序且都大于前面10个数字,那么在第一趟遍历后,最后发生交换的位置必定小于10,且这个位置之后的数据必定已经有序了,记录下这位置,第二次只要从数组头部遍历到这个位置就可以了。
<?php
function bubble4_sort($array)
{
$count = count($array);
if ($count <= 1) {
return $array;
}
$flag = $count;
while ($flag > 0) {
$k = $flag;
$flag = 0;
for ($j = 1; $j < $k; $j++) {
if ($array[$j - 1] > $array[$j]) {
$temp = $array[$j - 1];
$array[$j - 1] = $array[$j];
$array[$j] = $temp;
$flag = $j;
}
}
}
return $array;
}方案五:
<?php
function bubble_sort($array)
{
$count = count($array);
if ($count <= 1) {
return $array;
}
for ($i = $count - 1; $i > 0; $i--) {
$flag = false;
for ($j = 0; $j < $count; $j++) {
if ($array[$j] > $array[$j + 1]) {
$temp = $array[$j];
$array[$j] = $array[$j + 1];
$array[$j + 1] = $temp;
$flag = true;
}
}
if (!$flag)
break;
}
return $array;
}以上就是PHP实现冒泡排序的多种方法以一共五种其实理解了一种的原理其他的四种自然也就懂了!需要对大家学习PHP提供到帮助!
相关文章推荐:
快速排序,插入排序:php实现冒泡排序,,插入排序和快速排序......
以上就是php实现冒泡排序多种方案的详细内容,更多请关注php中文网其它相关文章!
| 欢迎光临 一起源码网 (https://www.171739.xyz/) | Powered by Discuz! X3.3 |