PHP实现快速排序与冒泡排序

原创 2013年12月05日 12:36:02
<?php
/*
基本概念
冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。
由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。
用二重循环实现,外循环变量设为i,内循环变量设为j。外循环重复9次,内循环依次重复 9,8,…,1次。每次进行比较的两个元素都是与内循环j有关的,它们可以分别用a[j]和a[j+1]标识,i的值依次为1,2,…,9,对于每一个 i, j的值依次为1,2,…10-i。

产生
在许多程序设计中,我们需要将一个数列进行排序,以方便统计,常见的排序方法有冒泡排序,二叉树排序,选择排序等等。而冒泡排序一直由于其简洁的思想方法和比较高的效率而倍受青睐。

排序过程
设想被排序的数组R[1..N]垂直竖立,将每个数据元素看作有重量的气泡,根据轻气泡不能在重气泡之下的原则,从下往上扫描数组R,凡扫描到违反本原则的轻气泡,就使其向上”漂浮”,如此反复进行,直至最后任何两个气泡都是轻者在上,重者在下为止。 
*/

$arr = array(345,4,17,6,52,16,58,69,32,8,234);
for($i=1;$i<count($arr);$i++){
	for($j=count($arr)-1;$j>=$i;$j--){
		if($arr[$j]<$arr[$j-1]){
			$temp = $arr[$j-1];
			$arr[$j-1] = $arr[$j];
			$arr[$j] = $temp;
		}
	}
} 

?>



<?php
/*
* 快速排序
* 1,先随机取一个中间值
* 2,把比中间值小的放到左侧,比中间值大的放到右侧,
* 3,然后再分别对左侧和右侧数据递归调用1,2步,合并左侧、中间值、右侧数据。
*/
function quickSort($arr) {
	$len = count($arr);
	if($len<=1) {
		return $arr;
	}
	$key = $arr[0];
	$l_arr = array();
	$r_arr = array();
	for($i=1;$i<$len;$i++) {
		if($arr[$i]>=$key) {
	          $r_arr[] = $arr[$i];
		} else {
                  $l_arr[] = $arr[$i];
		}
	}
	$l_arr = quickSort($l_arr);
	$r_arr = quickSort($r_arr);
	$key = (array)$key;
	return array_merge($l_arr, $key, $r_arr);
}
?>


排序算法解析——冒泡排序、选择排序、快速排序

时间复杂度是度量算法执行的时间长短,而空间复杂度是度量算法所需存储空间的大小。 算法的时间复杂度记做:T(n)=O(f(n))     在计算时间复杂度的时候,先找出算法的基本操作,然后根...
  • sdwuyulunbi
  • sdwuyulunbi
  • 2012年12月14日 11:04
  • 11192

排序(冒泡排序与快速排序)

1、冒泡排序(Bubble Sort)
  • u014174811
  • u014174811
  • 2014年11月23日 17:22
  • 785

各种排序总结(一)之--—冒泡排序、选择排序、快速排序

各种排序总结——冒泡排序、选择排序、快速排序        1、冒泡排序是比较经典的排序方法,是一种用时间换空间的排序方法。我总结了一下它的特点:(1)它的时间复杂度是;(2)每一趟相邻元素两两比较完...
  • xinyu2015
  • xinyu2015
  • 2015年11月04日 16:36
  • 4119

使用PHP描述冒泡排序和快速排序算法,对象可以是一个数组。

  • wugang806894
  • wugang806894
  • 2013年10月13日 17:33
  • 2074

java冒泡排序和快速排序的分析

说来惭愧,昨天面试的时候遇到快速排序的笔试题没答上来。搞java的长期接触的是业务方面的东西,特别是web方向的java,久而久之在学校里面学的最基本的一些东西给忘记了。网上搜索了这两种算法,基本都是...
  • weinianjie1
  • weinianjie1
  • 2015年05月19日 22:31
  • 1041

比较冒泡排序和快速排序的性能

1.取十组随机数,每组共200000个数,分别用冒泡排序和快速排序法排序,分别记录所化时间。 2.程序 #include #include #include #include //#i...
  • burnalex
  • burnalex
  • 2012年06月17日 20:59
  • 1427

js实现两种实用的排序算法——冒泡、快速排序

分享记录两种程序员必备的排序算法:冒泡算法、排序算法,面试日常,很实用!...
  • Loving_M
  • Loving_M
  • 2016年11月01日 10:29
  • 23020

Scala实现冒泡排序、归并排序和快速排序

1、冒泡排序def sort(list: List[Int]): List[Int] = list match { case List() => List() case head ::...
  • qq1010885678
  • qq1010885678
  • 2015年07月04日 21:36
  • 3682

冒泡排序和快速排序耗时比较(时间复杂度的理想与现实)

一个简单的题: 测试一:
  • acm_1361677193
  • acm_1361677193
  • 2014年08月28日 20:32
  • 1997

快速排序和冒泡排序的时间复杂度分析(C++算法实现对比)

今天晚上我学习快速排序,快速排序里面涉及到了思想有递归和分治。 快速排序里面最重要的一个变量是哨兵变量,它充当了一个中间值的角色。 然后遍历数组,逐个比较数组中的值跟中间值的大小,小的排在中间值前...
  • jjfly999
  • jjfly999
  • 2016年04月07日 23:40
  • 1895
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:PHP实现快速排序与冒泡排序
举报原因:
原因补充:

(最多只允许输入30个字)