欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

冒泡算法、快速排序、二分查找

程序员文章站 2024-03-22 23:27:28
...

1.什么是冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来
说并没有什么太大作用。

2. 算法步骤

比较相邻的元素。如果第一个比第二个大,就交换他们两个。

对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

针对所有的元素重复以上的步骤,除了最后一个。

持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

3.代码

	$arr = [9,10,4,8,3];
	for($j=0;$j<count($arr)-1;$j++){
		for($i=0;$i<count($arr)-1-$j;$i++){
			if($arr[$i] > $arr[$i+1]){
				$tmp = $arr[$i];
				$arr[$i]=$arr[$i+1];
				$arr[$i+1]=$tmp;
			}
		}
	}
	print_r($arr);

4.展示效果

冒泡算法、快速排序、二分查找

1.什么是快速排序

快速排序(Quicksort)是对冒泡排序的一种改进。

2. 算法步骤

速排序由C. A. R.
Hoare在1960年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

3.代码

	//快速排序
	$arr = [10,14,3,7,9,53,24,5,7,3];
	function quick_sort($arr){
		if(count($arr) <= 1){
			return $arr;
		}
		$modesc = $arr[0];
		$left = array();
		$right = array();
		for($i=1;$i<count($arr);$i++){
			if($arr[$i] <= $modesc){
				array_push($left,$arr[$i]);
			}else if($arr[$i] >= $modesc){
				array_push($right,$arr[$i]);
			}
		}
		$left = quick_sort($left);
		$right = quick_sort($right);
		$name = array_merge($left,array($modesc),$right);
		return $name;
	}
	$data = quick_sort($arr);
	print_r($data);

4.展示效果

冒泡算法、快速排序、二分查找

1.什么是二分查找

二分查找又称折半查找,优点是比较次数少,查找速度快,平均性能好;其缺点是要求待查表为有序表,且插入删除困难。因此,折半查找方法适用于不经常变动而查找频繁的有序列表。首先,假设表中元素是按升序排列,将表中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将表分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。

2.注意事项

查询的数据必须是按照顺序来排序的,从大到小或从小到大。

3.代码

	$data = [3,4,20,23,34,45,63,72];
	//二分查模式
	function getCkend($data,$num){
		$offset = 0;
		$end = count($data) - 1;
		while($offset <= $end){
			$midden = ceil(($offset + $end)/2);
			if($num == $data[$midden]){
				return $data[$midden];// break;
			}elseif($num > $data[$midden]){
				$offset = $midden + 1;
			}elseif($num < $data[$midden]){
				$end = $midden - 1;
			}
		}
	}
	$name = getCkend($data,63);
	print_r($name);

4.展示效果

冒泡算法、快速排序、二分查找

感谢你的观看,希望对你有帮助