zoukankan      html  css  js  c++  java
  • 快速排序算法

    快速排序:



    代码:
    <?php
    /** 快速排序算法
    * 1. 在数组中找一个元素作为key,一般取数组第一个元素作为key
    * 2. i=0, j=数组长度-1
    * 3. j-- 当 arr[j]<key, arr[i]与arr[j]交换位置
    * 4. i++ 当 arr[i]>key, arr[i]与arr[j]交换位置
    * 5. 重复3,4 直到 i==j 时,完成。
    * 6. 将key分隔的左右两组元素再分别执行 1,2,3,4,5 (递归)。
    */
    
    $arr = array();
    
    // 创建数组
    for($i=0; $i<20; $i++){
        array_push($arr, mt_rand(1,200));
    }
    
    echo 'source arr:'.implode(',', $arr).'<br>';
    
    quicksort($arr, 0, count($arr)-1);
    
    echo 'sorted arr:'.implode(',', $arr);
    
    // 快速排序
    function quicksort(&$arr, $low, $high){
    
        if($low>=$high){
            return ;
        }
    
        $i = $low;
        $j = $high;
        $flag = 1; // 0:i动作 1:j动作
    
        $key = $arr[$low];
    
        while($i<$j){
            switch($flag){
                case 0: // i
                    if($arr[$i]>$key){
                        $tmp = $arr[$i];
                        $arr[$i] = $arr[$j];
                        $arr[$j] = $tmp;
                        $flag = 1;
                    }else{
                        $i++;
                    }
                    break;
    
                case 1: // j
                    if($arr[$j]<$key){
                        $tmp = $arr[$i];
                        $arr[$i] = $arr[$j];
                        $arr[$j] = $tmp;
                        $flag = 0;
                    }else{
                        $j--;
                    }
                    break;
            }
        }
    
        // left arr
        quicksort($arr, $low, $i-1);
    
        // right arr
        quicksort($arr, $i+1, $high);
    
    }
    
    ?>


  • 相关阅读:
    页面可视化搭建工具前生今世
    16、Redis手动创建集群
    15、Redis的集群
    14、Redis的复制
    13、Redis的发布订阅模式
    12、Redis的事务
    11、Redis的持久化(RDB、AOF)
    9、Redis处理过期keys的机制
    8、Redis中sort命令详解
    7、Redis中对ZSet类型的操作命令
  • 原文地址:https://www.cnblogs.com/fdipzone/p/3715121.html
Copyright © 2011-2022 走看看