常见的几种基础的排序算法案例

写这篇博客就是为了记录自己重新学习的经历,好久没码代码了,发现连基本的以前学过的排序算法都不太记得了,刚好在学PHP语言,就顺便记录一下,以下所举的案例都是基础的,也是我从视频里学来的(可以理解为默写吧>_<),打开这篇文章的大佬们,有错请指出,不喜勿喷,感谢。

冒泡排序
<?php

	//冒泡排序
	$arr=array(3,9,1,4,0,13,6,2,10);

	$len=count($arr);
	for($i=0;$i<$len;$i++){
		
		for($j=0;$j<$len-1-$i;$j++){			//每次循环把大的往后放
			if($arr[$j]>$arr[$j+1]){
				$temp=$arr[$j];
				$arr[$j]=$arr[$j+1];
				$arr[$j+1]=$temp;
			}
		}
	}
	print_r($arr);

?>
---------
输出结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
选择排序
 <?php
 	
 	//快速排序
    $arr=array(3,9,1,4,0,13,6,2,10);
	$len=count($arr);

	for($i=0;$i<$len;$i++){

		$min=$i;
		for($j=$i+1;$j<$len;$j++){
			if($arr[$j]<$arr[$min]){
				$min=$j;			//记下最小那个数的下标
			}
		}
		if($min!=$i){				//把选择所得的那个最小的数往前放
			$temp=$arr[$i];
			$arr[$i]=$arr[$min];
			$arr[$min]=$temp;
		}
	}

	print_r($arr);
?>
-------------
结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
插入排序
<?php
    //插入排序:每步将1个待排序的记录,按关键字码值的大小插入前面已经排好序的文件适当的位置,知道全部插入完为止
	$arr=array(3,9,1,4,0,13,6,2,10);
	$len=count($arr);
	$change=false;     //标记:默认位置是对的,不用交换
	
	//确定要插入多少回
	for($i=1;$i<$len;$i++){
		$temp=$arr[$i];		//取出当前要插入的元素的值
		//比较
		for($j=$i-1;$j>=0;$j--){
			if($arr[$j]>$temp){
				$arr[$j+1]=$arr[$j];	//这个时候进行的交换,其实是相当于temp元素后面的每个元素往后移一个位置
				//$arr[$j]=$temp;
				$change=true;	//说明当前顺序的元素有不合适的位置
			}else{
				break;
			}
		}
		//判断位置是否需要改变
		if($change){
			$arr[$j+1]=$temp;
		}

		
	}

	print_r($arr);
?>

结果:Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 4 [5] => 6 [6] => 9 [7] => 10 [8] => 13 )
快速排序
 <?php
	
	//快速排序:用的递归算法
    $arr=array(3,9,1,4,0,13,6,2,10);
    function quick_sort($arr){
	//递归出口
	$len=count($arr);
	if($len<=1) return $arr;

	//取出某个元素,其余元素分为两边
	$left=$right=array();
	for($i=1;$i<$len;$i++){		//从1开始,因为第0个元素作为参照物
		if($arr[$i]<$arr[0]){
			$left[]=$arr[$i];
		}else{
			$right[]=$arr[$i];
		}
	}

	$left=quick_sort($left);
	$right=quick_sort($right);
	return array_merge($left,(array)$arr[0],$right);	//合并数组
    }

	echo '<pre>';
	print_r(quick_sort($arr));
?>

结果:Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 6
    [6] => 9
    [7] => 10
    [8] => 13
)
归并排序
<?php
    //归并排序
	$arr=array(3,9,1,4,0,13,6,2,10);
	function merge_sort($arr){
	$len=count($arr);
	//递归出口
	if($len<=1) return $arr;

	$middle=floor($len/2);
	$left=array_slice($arr, 0,$middle);
	$right=array_slice($arr, $middle);

	//递归点
	$left=merge_sort($left);
	$right=merge_sort($right);

	//假设左边和右边已经排好序,二路归并
	$m=array();
	while(count($left)&&count($right)){
		$m[]=$left[0]<$right[0] ? array_shift($left) : array_shift($right);		//哪个小,就哪个放进$m[]
	}
	//返回结果
	return array_merge($m,$left,$right);
	}
	echo '<pre>';
	print_r(merge_sort($arr));
?>

结果:Array
(
    [0] => 0
    [1] => 1
    [2] => 2
    [3] => 3
    [4] => 4
    [5] => 6
    [6] => 9
    [7] => 10
    [8] => 13
)

上面介绍了5中常见的基础排序算法,所用的语言是PHP,感觉自己对算法的理解能力还是有点差,这东西还是得花时间去理解透彻比较好,不然一段时间不接触就感觉很生疏,接下来要花时间重新码代码啦!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值