zoukankan      html  css  js  c++  java
  • PHP四种基本排序算法

    <?php
    /*
     *冒泡排序
     *两两比较相邻元素的大小,发现次序相反即进行交换
     */
    function bubbleSort($arr){
        $count = count($arr);
        if($count <= 0){
            return false;
        }
        for($i=0; $i<$count; $i++){
            for($j=$count-1; $j>$i; $j--){
                if($arr[$j] < $arr[$j-1]){
                    $tmp = $arr[$j];
                    $arr[$j] = $arr[$j-1];
                    $arr[$j-1] = $tmp;
                }
            }
        }
        return $arr;
    }
    
    /*
     *选择排序
     *每一趟从待排序的数据元素中选出最小(最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。
     */
    function selectSort($arr){
        if(!is_array($arr) || count($arr) == 0){
            return false;
        }
        $count = count($arr);
        for($i=0; $i<$count; $i++){
            $k = $i;
            for($j=$i+1; $j<$count; $j++){
                if($arr[$k] > $arr[$j]){
                    $k = $j;
                }
            }
            if($k != $i){
                $tmp = $arr[$i];
                $arr[$i] = $arr[$k];
                $arr[$k] = $tmp;
            }
        }
        return $arr;
    }
    
    /*
     *插入排序
     *在要排序的一组数中,假设前面的数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。
     */
    function insertSort($arr){
        $count = count($arr);
        if(!is_array($arr) || $count == 0){
            return $arr;
        }
        for($i=1; $i<$count; $i++){
            $tmp = $arr[$i];
            for($j=$i-1; $j>=0; $j--){
                if($tmp < $arr[$j]){
                    $arr[$j+1] = $arr[$j];
                    $arr[$j] = $tmp;
                }else{
                    break;
                }
            }
        }
        return $arr;
    }
    
    /*
     *快速排序
     *选择一个基准元素,通常选择第一个元素或者最后一个元素。通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素。此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。
     */
    function quickSort($arr){
        if(count($arr) <= 1){
            return $arr;
        }
        $key = $arr[0];
        $left_arr = array();
        $right_arr = array();
        for($i=1; $i<count($arr); $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);
    }
    ?>
  • 相关阅读:
    Docker多主机互联
    数据结构
    广度优先算法走出迷宫
    golang反射
    waitGroup的使用
    golang中的mutex锁
    goroutine和channel
    如何优雅的关闭Golang Channel?
    使用context关闭协程以及协程中的协程
    golang对不同系统的编译
  • 原文地址:https://www.cnblogs.com/hell0x/p/5318648.html
Copyright © 2011-2022 走看看