冒泡、快排、直插三种排序的比较

本文通过实现并比较冒泡排序、快速排序和直接插入排序三种排序算法的效率,展示了不同算法在处理大规模数据集时的时间消耗差异。实验使用PHP语言进行编程,并通过计时函数精确测量了每种算法执行所需的时间。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
header("Content-Type:text/html;charset=utf-8");
class Test{
	//冒泡排序为从小到大
	public function bubbleSort($arr){
		if(!is_array($arr)) return false;
		if(count($arr) <= 1) return $arr;
		for($i = 0;$i < count($arr);$i++){
			$mark = 0;
			for($j = 0;$j < count($arr) - $i-1;$j++){
				if($arr[$j] > $arr[$j+1]){
					$arr[$j] = $arr[$j] + $arr[$j+1];
					$arr[$j+1] = $arr[$j] - $arr[$j+1];
					$arr[$j] = $arr[$j] - $arr[$j+1];
					$mark = 1;
				}
			}
			if($mark == 0) break;
		}
		return $arr;
	}
	//快速排序为从小到大
	public function quickSort($arr){
		if(!is_array($arr)) return false;
		if(count($arr) <= 1) return $arr;
		$left = $right = array();
		for($i=1;$i<count($arr);$i++){
			if($arr[$i] < $arr[0]){
				$left[] = $arr[$i];
			}else{
				$right[] = $arr[$i];
			}
		}
		$arr = array_merge($left,array($arr[0]),$right);
		if($left) return $this->quickSort($arr);	
		return $arr;
	}
	//直接插入排序为从小到大
	public function insertSort($arr){
		if(!is_array($arr)) return false;
		if(count($arr) <= 1) return $arr;
		$arr1[] = $arr[0];
		for($i = 1 ; $i < count($arr) ; $i++){
			for($j = count($arr1) - 1 ; $j >= 0 ; $j--){
				if($arr1[$j] < $arr[$i]) break;				
				$arr1[$j+1] = $arr1[$j];
			}
			$arr1[$j+1] = $arr[$i];
		}
		return $arr1;
	}
}

$test  = new Test();

$arr = array();
for($i = 0;$i<2000;$i++){
	$arr[$i] = rand(0,100000);
}

$time1 = microtime(true);
$test->bubbleSort($arr);
$time2 = microtime(true);
echo '耗时'.($time2*1000-$time1*1000).'毫秒';
echo '<br />';
$time1 = microtime(true);
$test->quickSort($arr);
$time2 = microtime(true);
echo '耗时'.($time2*1000-$time1*1000).'毫秒';
echo '<br />';
$time1 = microtime(true);
$test->insertSort($arr);
$time2 = microtime(true);
echo '耗时'.($time2*1000-$time1*1000).'毫秒';


运行结果:

耗时5249.3747558594毫秒
耗时50.65185546875毫秒
耗时327.828125毫秒

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值