常用的排序函数:sort,  rsort,  asort,  arso

数组排序算法(重点/难点)

  1. 数组的排序问题rt

数组排序函数大全:

PHP第六天 数组排序算法-冒泡排序

原理:

遍历一个数组,在此过程中,将相邻的两个单元的值进行比较:如果前面的比后面的大,则将两个值交换位置。这个过程到最后,数组中的最大值一定放在最后位置了。

如果将上述过程再进行一遍,则又可以确定剩余数据中的最大值放在倒数第二的位置。

然后将上述过程继续进行一遍,则可以继续确定剩余数据中的最大值放在倒数第三的位置。

依次类推。。。。。。进行若干次,就排好了。

图示:

有数组:$arr1 = array(18,  22,  12,   15,  23,  9);

原始数组

18

22

12

15

23

9

第1趟之后

18

12

15

22

9

23

第2趟之后

12

15

18

9

22

23

第3趟之后

12

15

9

18

22

23

第4趟之后

12

9

15

18

22

23

第5趟之后

9

12

15

18

22

23

规律总结:

  1. 要进行从头到尾两两比较并进行交换位置的趟数为$n-1趟,$n是总个数(数组长度)
  2. 每次都对相邻的两个数据进行大小比较,如果需要,就交换他们的位置!
  3. 每趟要比较的次数都比前一趟少1次,第一趟要比较的次数为:$n-1

 

$arr1 = array("a"=>8,  "b"=>2,  "c"=>5,  "x"=>3,  "e"=>6);	
sort($arr1);		//排好了!由低到高,结果为:[2, 3, 5, 6, 8]
rsort($arr1);		//排好了!由高到低,结果为:[8, 6, 5, 2, 2]


<?php 
/*
1,要进行从头到尾两两比较并进行交换位置的趟数为$n-1趟,$n是数组长度
2,每次都对相邻的两个数据进行大小比较,如果需要,就交换他们的位置!
3,每趟要比较的次数都比前一趟少1次,第一趟要比较的次数为:$n-1
*/

$arr1 = array(18,  22,  12,   15,  23,  9);
$n = count($arr1);
//控制要进行的趟数
for($i = 0; $i < $n-1; $i++)
{
	//在每一趟里面,控制进行比较的次数
	for($k = 0; $k < $n-1 - $i;  $k++)
	{
		//如果前面一项比后面一项大,就要进行交换
		if($arr1[$k] > $arr1[$k+1] )
		{
			$temp = $arr1[$k];
			$arr1[$k] = $arr1[$k+1];
			$arr1[$k+1] = $temp;
		}
		else{
			//如果不是这样,就什么也不用做
		}
	}
}
echo "<pre>";
print_r($arr1);
echo "</pre>";

//交换原理:
//普通变量的交换
$a = 3;
$b = 4;
//交换上述两个变量的值
$temp = $a;
$a = $b;
$b = $temp;
//数组单元的交换:交换其中的下标为2和下标为6的两个单元的值
$arr2 = [ 2=>15, 3=>18, 6=>20];
$temp = $arr2[2];
$arr2[2] = $arr2[6];
$arr2[6] = $temp;

 ?>
<?php

/**
 * @Author: Administrator
 * @Date:   2019-05-29 15:37:11
 * @Last Modified by:   Administrator
 * @Last Modified time: 2019-05-29 15:52:13
 */
$arr = [12,25,9,38,6,8];
$n = count($arr);
for($i=0;$i<$n-1;$i++)
{
	for($k=0;$k<$n-1-$i;$k++)
		{
			$arri = $arr[$k];
			if($arr[$k+1]<$arr[$k])
			{
				$arr[$k] = $arr[$k+1];
				$arr[$k+1] = $arri;
			}
	}
	
}
print_r($arr);

 

相关文章: