php排序算法

  1. 插入排序
    插入排序正如其名
    [49] 38 65 97 76 13 27 49
    J=2(38) [38 49] 65 97 76 13 27 49
    J=3(65) [38 49 65] 97 76 13 27 49
    J=4(97) [38 49 65 97] 76 13 27 49
    J=5(76) [38 49 65 76 97] 13 27 49
    J=6(13) [13 38 49 65 76 97] 27 49
    J=7(27) [13 27 38 49 65 76 97] 49
    J=8(49) [13 27 38 49 49 65 76 97]
    代码如下
function insert_sort($arr){
		for ($i=0; $i <count($arr); $i++) { 
			$tmp=$arr[$i];
			for ($j=$i-1;$j>=0;$j--) { 
				if($tmp<$arr[$j]){
					$arr[$j+1]=$arr[$j];
					$arr[$j]=$tmp;
				}
			}
		}
		return $arr;
	}
  1. 冒泡排序
    冒泡排序(Bubble Sort,台湾译为:泡沫排序或气泡排序)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
    步骤:
    比较相邻的元素。如果第一个比第二个大,就交换他们两个。
    对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
    针对所有的元素重复以上的步骤,除了最后一个。
    持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
//冒泡排序
	function bubble_sort($arr){
		//控制第几轮
		for ($i=1; $i<count($arr); $i++) { 
			for ($j=0; $j<count($arr)-$i; $j++) { 
				if ($arr[$j]>$arr[$j+1]) {
					$tmp=$arr[$j];
					$arr[$j]=$arr[$j+1];
					$arr[$j+1]=$tmp;
				}
			}
		}
		return $arr;
	}
  1. 快速排序
    思路分析:选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
//快速排序
	function quick_sort($arr){
		//如果数组元素个数小于1,直接返回数组
		if (count($arr)<=1) {
			return $arr;
		}
		//寻找一个基准,第一个元素或者最后一个元素
		$base_num=$arr[0];
		$right_arr=array();
		$left_arr=array();
		for ($i=1; $i <count($arr) ; $i++) { 
			if ($arr[$i]>$base_num) {
				$right_arr[]=$arr[$i];
			}else{
				$left_arr[]=$arr[$i];
			}
		}
		//递归调用
		$right_arr=quick_sort($right_arr);
		$left_arr=quick_sort($left_arr);
		return array_merge($left_arr,array($base_num),$right_arr);
	}
  1. 选择排序
    思路分析:在要排序的一组数中,选出最小的一个数与第一个位置的数交换。然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。
//选择排序
	function select_sort($arr){
		for ($i=0; $i<count($arr)-1; $i++) { 
			$p=$i;
			for ($j=$i+1; $j<count($arr); $j++) { 
				if ($arr[$p]>$arr[$j]) {
					$p=$j;
				}
			}
			if($p!=$i){
				$tmp=$arr[$i];
				$arr[$i]=$arr[$p];
				$arr[$p]=$tmp;
			}
		}
		return $arr;
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值