6种经典排序算法的舞蹈版演示,排序不再难理解了

希尔排序

 

选择排序

 

插入排序

 

冒泡排序   百度百科

 

快速排序

 

归并排序

 

php版

BUBBLESORT(A)
for i <- 1 to length[A]
do for j <- length[A] downto i + 1
do if A[j]<A[j - 1]
then exchange A[j] <-> A[j-1]

 

 

<?php
	/*
	 * point one: remember swap variable
	 * point two: remember inside loop size
	 */
	$arr = array(2,1,4,2,7);		//init a array variable
	$result = bubbling_ort($arr);		//invoke a function and get result

	echo '<pre>';				//output format
	print_r($result);			//output result
	echo '</pre>';

	function bubbling_sort($arr){		//function start
		$size = count($arr)-1;	//need to loop size is total length - 1
		for ($i = 0; $i < $size; $i++) {		//outside loop
			for ($j = 0; $j < $size-$i; $j++) { //inside loop
				if ($arr[$j] < $arr[$j+1]) {	//compare big or small
					$temp      = $arr[$j];		//start swap
					$arr[$j]   = $arr[$j+1];
					$arr[$j+1] = $temp;
				}
			}
		}
		return $arr;
	}
?>

 

<?php
	/*
	 * point one: remember swap variable
	 * point two: remember inside loop size
	 */
	$arr = array(2,1,4,2,7);		//init a array variable
	$result = bubbling_sort($arr);		//invoke a function and get result

	echo '<pre>';				//output format
	print_r($result);			//output result
	echo '</pre>';

	function bubbling_sort($arr){		//function start
		$size = count($arr)-1;	//need to loop size is total length - 1
		for ($i = 0; $i < $size; $i++) {		//outside loop
			for ($j = 0; $j < $size-$i; $j++) { //inside loop
				if ($arr[$j] < $arr[$j+1]) {	//compare big or small
					//swap two number without temp variable
					$arr[$j] = $arr[$j+1] + $arr[$j];
					$arr[$j+1] = $arr[$j] - $arr[$j+1];
					$arr[$j]   = $arr[$j] - $arr[$j+1];
				}
			}
		}
		return $arr;
	}
?>

 

<?php
function quickSort($arr)
{
	$len = count($arr);
	if($len <= 1) {
		return $arr;
	}

	$key = $arr[0];			
	$left_arr = array();
	$right_arr = array();
	for($i=1; $i<$len; $i++)
	{
		if($arr[$i] <= $key)
		{
			$left_arr[] = $arr[$i];
		}
		else
		{
			$right_arr[] = $arr[$i];
		}
	}
	$left_arr = quickSort($left_arr);
	$right_arr = quickSort($right_arr);
	return array_merge($left_arr, array($key), $right_arr);
}

$arr = array(49,38,65,97,76,13,27);
echo '<pre>';
print_r(quickSort($arr));
echo '</pre>';
?>

 

<?php
function quick_sort($arr)
{
	_quick_sort($arr,0,(count($arr)-1));
	return $arr;
}
function _quick_sort(&$arr,$i,$j)
{
	$pivot = $arr[$i];
	$_i = $i;
	$_j = $j;
	while($i<$j)
	{
		while($arr[$j]>=$pivot && $i<$j) $j--;
		if($i<$j)
		{
			$arr[$i] = $arr[$j];
			$i++;
		}
		while($arr[$i]<=$pivot && $i<$j) $i++;
		if($i<$j)
		{
			$arr[$j] = $arr[$i];
			$j--;
		}
	}
	$arr[$i]=$pivot;
	if($_i<$i-1)
	{
		_quick_sort($arr,$_i,$i-1);
	}
	if($_j>$i+1)
	{
		_quick_sort($arr,$i+1,$_j);
	}
}

$just = array(49,38,97,76,13,27);
print_r( quick_sort($just) );

 

<?php

function selection_sort($array){
	$count = count($array);
	for ($i=0;$i<$count-1;$i++){
		/* find the minest */
		$min = $i;
		for ($j=$i+1;$j<$count;$j++){
			//由小到大排列
			if ($array[$min]>$array[$j]) { //表明当前最小的还比当前的元素大
				$min = $j;//赋值新的最小的
			}
		}

		/* swap $array[$i] and $array[$min] 即将当前内循环的最小元素放在$i位置上*/
		$temp = $array[$min];
		$array[$min] = $array[$i];
		$array[$i] = $temp;
	}
	return $array;
}
$old_array = array(3,4,1,6,5,2);
$new_array = selection_sort($old_array);

echo '<pre>';
print_r($new_array);
echo '</pre>';
?>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值