Quantcast
Channel: 83
Viewing all articles
Browse latest Browse all 59

经典算法之一,php冒泡排序实现

$
0
0

冒泡排序是非常容易理解和实现,以从小到大排序举例:
设数组长度为N。
1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。
2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个位置。
3.N=N-1,如果N不为0就重复前面二步,否则排序完成。

视频解释

BubbleSort1 一般写法
BubbleSort2 BubbleSort3 增加flag标志位 如果这一轮没交换数据则表示排序完成

function BubbleSort1($arr)
{
	$start = microtime(TRUE);
	$n = count($arr);
	$s = 0;
	for($i=0; $i<$n; $i++)
	{
		for($j=1; $j<$n-$i; $j++)
		{
			$s++;
			if($arr[$j-1] > $arr[$j])
				swap($arr[$j-1], $arr[$j]);	
		}
	}
	echo "*$s*\n";
	$end = microtime(TRUE)-$start;
	echo "BubbleSort1:$end\n<br/>";
	return $arr;
}

function BubbleSort2($arr)
{
	$start = microtime(TRUE);
	$n = count($arr);
	$s = 0;
	for($i=0; $i<$n; $i++)
	{
		$flag = TRUE;
		for($j=1; $j<$n-$i; $j++)
		{
			$s++;
			if($arr[$j-1] > $arr[$j])
			{
				$flag = FALSE;
				swap($arr[$j-1], $arr[$j]);
			}
		}
		if($flag) break;
	}
	echo "*$s*\n";
	$end = microtime(TRUE)-$start;
	echo "BubbleSort2:$end\n<br/>";
	return $arr;
}

function BubbleSort3($arr)
{
	$start = microtime(TRUE);
	$n = count($arr);
	$s = 0;
	$flag = TRUE;
	while ( $flag ) {
		$flag = FALSE;
		for($j=1; $j<$n; $j++)
		{
			$s++;
			if($arr[$j-1] > $arr[$j])
			{
				swap($arr[$j-1], $arr[$j]);
				$flag = TRUE;
			}
		}
		$n--;
	}
	echo "*$s*\n";
	$end = microtime(TRUE)-$start;
	echo "BubbleSort3:$end\n<br/>";
	return $arr;
}

//交换两个数
function swap(&$a, &$b)
{
	list ( $a, $b ) = array ($b, $a );
}

//创建随机数组
function createArray($leng)
{
	$start = microtime(TRUE);
	$arr = array();
	while ($leng--) {
		$arr[] = rand();
	}
	$end = microtime(TRUE)-$start;
	echo "createArray:$end\n<br/>";
	return $arr;
}

实例
$arr = createArray(4000);
$r = BubbleSort3($arr);
echo "\n<br/>";
$r = BubbleSort2($arr);
echo "\n<br/>";
$r = BubbleSort1($arr);

Viewing all articles
Browse latest Browse all 59

Trending Articles