1、数组的排序常用方法:

  1. 冒泡法、选择排序、插入排序、快速排序、

2、排序分类:

  内部排序:指将需要处理的所有数据都加载到内部存储器中进行排序。

    内部排序又分为交换式(冒泡法、快速排序)、选择式、插入式排序法

    冒泡法、选择排序、插入排序、快速排序都属于内部排序


  外部排序:数据量过大,无法全部加载到内存中,需要借助外部存储进行排序。

3、排序方法效率:

  冒泡发<选择排序<插入排序

  快速排序法速度很快,但效率并不高,占用空间太多

4、冒泡排序法实例:

冒泡排序的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1 个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再大于第2个数),将小数放前,大数放后,一直比较到最小数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最小数。如此下去,直至最终完成排序。由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

<?php
//echo "<br>";echo"<br>";echo "<br>";echo "<br>";

$arr =array(1,5,3,9,4,8,12,3,0,7,7.6,3.4,6);
//定义一个中间变量
$temp = 0;
//升序排序
for($i=0;$i<count($arr)-1;$i++)
{
         for($j=0;$j<count($arr)-1-$i;$j++)
         {        //说明前面的数比后面的大就要交换
                   if($arr[$j]>$arr[$j+1])
                   {
                            $temp= $arr[$j];
                            $arr[$j]= $arr[$j+1];
                            $arr[$j+1]= $temp;
                   }
         }
}       
//输出排序后数组
foreach($arr as $key=>$key_value)
{
         echo'$arr['.$key."]=".$key_value."<br>";
}
?>

冒泡排序时间复杂度为O(n2);

5、选择排序法实例详解:

选择排序法的思路:就是再第一次循环中,假设第一个数是最小的;然后跟第二个数比较,一直比到最后,找出最小值,然后把最小值跟第一个数的位置互换;再进行下一次循环,找出最小值跟第二个位置的数互换;一直循环数组的个数减去1次;数组就成了有序的了

<?php 
function selectSort(&$arr)  
//注意此处要加地址传递符号;因为数组默认传递的是值,不是地址;若不地址传递,排序的是$arr而不是$asd。
{
    //$arr = array(1,5,3,9,4,8,12,3,0,7,7.6,3.4,6);
    //定义一个中间变量
    $temp = 0;
    //升序排序
    for($i=0;$i<count($arr)-1;$i++)
    {
        //假设$i就是最小的数
        $minVal=$arr[$i];
        //记录我认为最小数的下标
        $minIndex=$i;
        for($j=$i+1;$j<count($arr);$j++)
        {    //如果我认为的最小值不是最小
            if($minVal>$arr[$j])
            {
                $minVal = $arr[$j];
                $minIndex = $j;
            }
        }
        //最后交换
        $temp = $arr[$i];
        $arr[$i] = $arr[$minIndex];
        $arr[$minIndex] = $temp;
    }    
}
$asd = array(1,0,2,9,3,8,4,7,5,6);
//调用选择排序法的函数
selectSort($asd);
//输出排序后数组  升序显示
foreach($asd as $key=>$key_value)
{
    echo '$asd['.$key."]=".$key_value."<br>";
}
?>

6、PHP快速排序法:

<?php
//快速排序法封装函数
function quick_Sort($array){
    //先判断是否需要继续进行,若所要排序数组只有一个元素或没有元素则不需要排序
    $len = count($array);
    if($len <= 1)
    {
        return $array;
    }
    //如果所给数组元素大于1个,需要排序
    //选择数组第一个元素作为标尺
    $key = $array[0];
    //初始化两个数组
    $left_array = array();//小于标尺的
    $right_array = array();//大于标尺的

    //遍历所给数组除了标尺外的所有元素,按照大小关系放入两个数组内
    for($i=1;$i<$len;$i++){
        if($array[$i]<$key){    
    //如果数组元素小于标尺则将该元素放入左数组
            $left_array[] = $array[$i];
        }else{
            //如果数组元素大于标尺则将该元素放入右数组
            $right_array[] = $array[$i];
        }
    }
    //再分别对 左数组 和 右数组进行相同的排序处理方式
    //递归调用这个函数,并记录结果 
    $left_array = quick_Sort($left_array);
    $right_array = quick_Sort($right_array);
    //合并左数组 标尺 右数组
    //array_merge() 函数把两个或多个数组合并为一个数组。
    //如果键名有重复,后面的键名的值覆盖前面的键名的值。如果数组是数字索引的,则键名会以连续方式重新索引。
    //语法   array_merge(array1,array2,array3...)
    return array_merge($left_array,array($key),$right_array);
}

$sortarray = array(13,89,23,9,19,88,56,78,34,69,10,14);
print_r(quick_Sort($sortarray));
?>