php_数组_排序

147 阅读2分钟

题目:

用php实现排序算法 (冒泡 、选择、快速排序任选一种你熟悉的就可以) 自己可以随便定义一个数组,然后进行排序,升序排序

注意: 
1. 先把思路梳理清楚 最好把思路写下来,可以参考别人代码但一定要理解代码里的意思

冒泡排序法

  • 原理图:

image.png

  • 思路

           对数组进行遍历,每次遍历的数组元素,都和数组中的后续元素进行比较,判断大小
    

降序

  <?php
//降序
	$num=[12,3,5,23,6,87,3245,96,13,10];
	echo count($num);
	$arrlength=count($num);  //获取数组长度
	for($i=0;$i<$arrlength;$i++){//从大到小排序
		$max=$num[$i];		//每次将这个数设置为最大值
		echo $max,'<br>';
		for($j=$i+1;$j<=$arrlength;$j++){ //在数组后寻找比最大值更大的数
			if ($num[$j]>$max){	//判断是否比max更大,如果更大,就比较的两个数交换
				$max=$num[$j];	//比max大 将找到的数给max
				$num[$j]=$num[$i];
				$num[$i]=$max;
			}
		}
	}
	echo '<br>使用冒泡排序法对数组进行排序<hr/>';
	echo '<pre>';
	var_dump($num);
	echo '</pre>';
?>

image.png

升序

<?php
	$num1=[12,3,5,23,6,87,3245,96,13,10];
	echo count($num1);
	$arrlength=count($num1);  //获取数组长度
	for($i=0;$i<$arrlength;$i++){//从小到大排序
		$min=$num1[$i];		//每次将这个数设置为最小值
		for($j=$i+1;$j<$arrlength;$j++){ //在数组后寻找比最小值更小的数
		echo $j;
			if ($num1[$j]<$min){	//判断是否比min更小,两个数交换
				$min=$num1[$j];	//比min小 将找到的数给min
				$num1[$j]=$num1[$i];
				$num1[$i]=$min;
			}
		}
	}
	echo '<br>使用冒泡排序法对数组进行排序<hr/>';
	echo '<pre>';
	var_dump($num1);
	echo '</pre>';
?>

image.png

简单选择排序

思路: 对于一个数组进行循环,数组中有几个元素,就进行几次比较

例如: 对于一个数组【1359334】
第一次:使用1,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第二次,使用3,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第三次,使用5,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第四次,使用9,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换
第五次,使用33,和后续中的元素进行比较,找出后续元素中的最大(小)值,进行交换

这里只是举例子,后续进行具体操作

代码实现

<?php
  $arr=array(9,1,2,10,4,12,3);
  print_r($arr);
  $arrlength=count($arr);
  for($i=0;$i<$arrlength-1;$i++){
  	$min=$arr[$i];				//也可以直接$min_index=$i
  	for($j=$i+1;$j<$arrlength;$j++){
  		if($arr[$j]<$min){ //寻找后续数组中最小的一个数,
  							//$min_index=$i 的比较方式为 $arr[$j]<$arr[$min_index]
  			$min=$arr[$j];	//将最小的数赋值给$min,,,
  							//	其中 其实也可以使用索引的方式
  							//直接可以一句话:$min_index=$j
  			$min_num=$j;	//获取最小数的索引
  		}
  	}
  	//echo '<br>';
  	if($min != $arr[$i]){ //判断这个最小数,和之前的数还相等嘛,不相等就是后面有更小的数
  		$t=$arr[$i];
  		$arr[$i]=$arr[$min_num];  	//和找到的最小的数交换位置
  		$arr[$min_num]=$t;
  	}
  }
  echo '<pre>';
  print_r($arr);		//输出显示结果
  echo '</pre>';
?>

输出结果

image.png