dsfafaadfsa

十大排序算法之冒泡排序(1)

1. 冒泡排序

<?php

/**
* 原始冒泡排序
*/
function bubbleSort($sortData)
{
$count = count($sortData);
$sortCount = 0;

for ($i = 0; $i < $count - 1; $i++) {
for ($j = 0; $j < $count - $i - 1; $j++) {
$sortCount++;
if ($sortData[$j] > $sortData[$j + 1]) {
$temp = $sortData[$j];
$sortData[$j] = $sortData[$j + 1];
$sortData[$j + 1] = $temp;
}
}
}

echo 'bubbleSort Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}

/**
* 改进1:使用标识符标记某次循环是否交换了,没交换则直接终止(全部有序)
*
*/
function bubbleSort_2($sortData){
$count = count($sortData);
$sortCount = 0;

$isChanged = true;
for ($i = 0; $i < $count - 1 && $isChanged; $i++) {
$isChanged = false;
for ($j = 0; $j < $count - $i - 1; $j++) {
$sortCount++;
if ($sortData[$j] > $sortData[$j + 1]) {
$temp = $sortData[$j];
$sortData[$j] = $sortData[$j + 1];
$sortData[$j + 1] = $temp;
$isChanged = true;
}
}
}

echo 'bubbleSort_2 Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}

/**
* 改进2:记录最后一次更改的位置,之后的不再进行比较(局部有序)
*
*/
function bubbleSort_3($sortData){
$count = count($sortData);
$sortCount = 0;

$isChanged = true;
$lastCount = $count - 1;
for ($i = 0; $i < $lastCount && $isChanged; $i++) {
$isChanged = false;
for ($j = 0; $j < $lastCount - $i; $j++) {
$sortCount++;
$lastSort = $lastCount;
if ($sortData[$j] > $sortData[$j + 1]) {
$temp = $sortData[$j];
$sortData[$j] = $sortData[$j + 1];
$sortData[$j + 1] = $temp;
$isChanged = true;
$lastSort = $j;
}
}
$lastCount = $lastSort;
}

echo 'bubbleSort_3 Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}

/**
* 改进3:双向排序,从前往后记录最后一次排序的位置post1,从后往前记录最后一次排序的位置post2
* 当post2 > post1的时候说明完成了
*/
function bubbleSort_4($sortData){
$count = count($sortData);
$post1 = $count-1;
$post2 = 0;
$index = 0;
$sortCount = 0;
while($post1 > $post2){
for($i = $post2; $i < $post1; $i++){
$sortCount++;
if ($sortData[$i] > $sortData[$i + 1]) {
$temp = $sortData[$i];
$sortData[$i] = $sortData[$i + 1];
$sortData[$i + 1] = $temp;
$index = $i;
}
}
$post1 = $index;

for($j = $post1; $j > $post2; $j--){
if($sortData[$j - 1] > $sortData[$j]){
$sortCount++;
$temp = $sortData[$j];
$sortData[$j] = $sortData[$j - 1];
$sortData[$j - 1] = $temp;
$index = $j;
}
}
$post2 = $index;
}

echo 'bubbleSort_4 Count:' . $sortCount;
echo PHP_EOL;
return $sortData;
}

$testSortData = [3, 2, 9, 234, 3432, 43, 22, 33, 21312, 123];

$sortResult = bubbleSort($testSortData);
echo 'bubbleSort Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));
echo PHP_EOL;

$sortResult = bubbleSort_2($testSortData);
echo 'bubbleSort_2 Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));

$sortResult = bubbleSort_3($testSortData);
echo 'bubbleSort_3 Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));

$sortResult = bubbleSort_4($testSortData);
echo 'bubbleSort Result:';
echo PHP_EOL;
echo(implode(',', $sortResult));
echo PHP_EOL;

posted @ 2021-02-01 18:15  狩猎者丿七夜  阅读(88)  评论(0)    收藏  举报