PHP

php中的几种内部排序方法

智言 2014年08月28日 阅读(5159) 0

说到排序,相信作为一个程序员那是必须要了解和最基本的东西,之前在学java的时候就已经领略到了排序的魅力,而在php中的排序无非也是那么几种,所以在这里分享给大家,当然,我在这里都已经整合成函数的形式,所以大家如果有在使用的,可以直接调用就行了,非常的方便。

冒泡排序

//冒泡排序法
function arrMao(&$arr){
	$temp = 0 ;
	for($i=0;$i<count($arr)-1;$i++){
		for($j=0;$j<count($arr)-1-$i;$j++){
			if($arr[$j]>$arr[$j+1]){
				$temp = $arr[$j];
				$arr[$j]=$arr[$j+1];
				$arr[$j+1]=$temp;
			}
		}
	}
	return $arr;
}

选择排序

选择排序比冒泡排序在效率上要高,这个已经测试过了的,代码如下:

//选择排序法
function arrXuan(&$arr){
	for($i=0;$i<=count($arr)-1;$i++){
		for($j=$i+1;$j<count($arr);$j++){
			if($arr[$i]>$arr[$j]){
				$temp = $arr[$i];
				$arr[$i] = $arr[$j];
				$arr[$j] = $temp;
			}
		}
	}
	return $arr;
}

插入排序

对于插入排序比之前的两种排序方法的效率要高的。

它的基本思想是:把n个待排序的元素看成为一个有序表和一个无需表,开始时有序表中只包含一个元素,无需表中包含有n-1个元素,排序过程中每次从无需表中取出第一个元素,把它的排序码一次雨有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

代码如下:

function arrCha(&$arr){
	for($i=1;$i<count($arr);$i++){
		$insertVal = $arr[$i];

		$insertIndex = $i-1;

		while($insertIndex>=0&&$insertVal<$arr[$insertIndex]){
			$arr[$insertIndex+1]=$arr[$insertIndex];
			$insertIndex--;
		}
		$arr[$insertIndex+1]=$insertVal;
	}
	return $arr;
}

快速排序

快速排序法是最难的一种,但是它的效率当然也是最高的,20W的数据可以在2秒钟内搞定,这就是效率,当然了,在一瞬间你的内存也会吃紧的。

代码如下:

function arrKuai($left,$right,&$arr){
	$l = $left;
	$r = $right;
	$pivot = $arr[($left+$right)/2];
	$temp = 0;

	while($l<$r){
		while($arr[$l]<$pivot) $l++;
		while($arr[$r]>$pivot) $r--;

		if($l>=$r) break;

		$temp = $arr[$l];
		$arr[$l] = $arr[$r];
		$arr[$r] = $temp;
	}

	if($l==$r){
	
		$l++;
		$r--;
	}
	if($left<$r) arrKuai($left,$r,$arr);
	if($right>$l) arrKuai($l,$right,$arr);


	return $arr;
}

总结

无论你是使用哪种,关键是你了解这些方法的基本思想原理就可以了。

智言

业务开发请联系QQ:5679361

评论 抢沙发

评论前必须登录!

 


如果你觉得本站内容对你有所帮助,比如提升你对编程方面的认识,你可以通过上面的二维码请博主喝杯咖啡,安好。

WEB前端开发部落(公众号:webapp_club)

群列表

前端初级学习群:初级Web前端学习群(后期为支付入群)
PHP初级学习群:PHP(MySQL)学习交流群
QQ群仅作为相关领域讨论平台,均提供高质量问题交流,禁止闲聊,无法接受的朋友请勿加群!
进群需要通过这里获取进群码才能进群哦!

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏