常用的排序函数:sort, rsort, asort, arso
数组排序算法(重点/难点)
- 数组的排序问题rt
数组排序函数大全:
原理:
遍历一个数组,在此过程中,将相邻的两个单元的值进行比较:如果前面的比后面的大,则将两个值交换位置。这个过程到最后,数组中的最大值一定放在最后位置了。
如果将上述过程再进行一遍,则又可以确定剩余数据中的最大值放在倒数第二的位置。
然后将上述过程继续进行一遍,则可以继续确定剩余数据中的最大值放在倒数第三的位置。
依次类推。。。。。。进行若干次,就排好了。
图示:
有数组:$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 |
规律总结:
- 要进行从头到尾两两比较并进行交换位置的趟数为$n-1趟,$n是总个数(数组长度)
- 每次都对相邻的两个数据进行大小比较,如果需要,就交换他们的位置!
- 每趟要比较的次数都比前一趟少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);