• 几个简单易懂的排序算法php


      几个简单易懂的排序算法。排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。 

    <?php
    
    
    // 冒泡排序
    function bubble_sort(array $arr){
        $len = count($arr) - 1;
        for($i=0; $i< $len; $i++){
            // 升序的话,两两比较第一轮排序过后,最后一个一定是最大的了;
            // 所以第二轮时$j依然从0开始,但是结束的时候只需要管前$len-1的长度
            for($j=0; $j < $len-$i; $j++){
                if ($arr[$j] > $arr[$j+1]){
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$j+1];
                    $arr[$j+1] = $temp;
                }
            }
        }
        return $arr;
    }
    
    
    
    // 选择排序
    function select_sort(array $arr){
        $len = count($arr) - 1;
        for($i=0; $i< $len; $i++){
            for($j=$i+1; $j <= $len; $j++){
                // 选择排序,就是选择下边是$i的元素,固定住它,让它去和$j的比和交换
                if ($arr[$j] < $arr[$i]){
                    $temp = $arr[$j];
                    $arr[$j] = $arr[$i];
                    $arr[$i] = $temp;
                }
            }
        }
        return $arr;
    }
    
    
    
    // 插入排序
    /** 所谓插入排序法,就是检查第i个数字,如果在它的左边的数字比它大,进行交换,这个动作一直继续下去,直到这个数字的左边数字比它还要小,就可以停止了。插入排序法主要的回圈有两个变数:i和j,每一次执行这个回圈,就会将第i个数字放到左边恰当的位置去。**/
    function insert_sort(array $arr){ $len = count($arr) - 1; for($i=0; $i<= $len; $i++){ // 在$i位置前面的元素进行插入 for($j=$i; $j >0; $j--){ if ($arr[$j-1] > $arr[$j]){ $temp = $arr[$j]; $arr[$j] = $arr[$j-1]; $arr[$j-1] = $temp; } } } return $arr; } $arr = array(12, 9, 1, 4, 6, -3); $bubble = bubble_sort($arr); $select = select_sort($arr); $insert = insert_sort($arr); echo '<pre>'; print_r($bubble); echo '<pre>'; print_r($select); echo '<pre>'; print_r($insert); /** * Array ( [0] => -3 [1] => 1 [2] => 4 [3] => 6 [4] => 9 [5] => 12 ) */

    排序算法,在应用到解决实际问题的时候(由于不一定总是数字排序),重点要分析出什么时候该交换位置。 

    用冒泡法实现了一个简单的排序问题,题目是这样的。

    <?php
    $arr = array(
        'B5','D3','B4','B2','C5','A1','A2','A6','A4','A5','A6','B1','C1'
    );
    
    $len = count($arr) - 1;
    for($i=0; $i< $len; $i++){
        for($j=0; $j < $len-$i; $j++){
            $first_1 = getstr($arr[$j]);
            $first_2 = getstr($arr[$j],1);
            $second_1 = getstr($arr[$j+1]);
            $second_2 = getstr($arr[$j+1],1);
            $con1 = $first_1=='A' &&
                ( $second_1!='A' || ($second_1=='A' && $first_2<$second_2)  );
            $con2 = $first_1!='A' && $second_1!='A' &&
                ($first_2<$second_2 || ($first_2==$second_2 && ord($first_1)<ord($second_1) ));
    
            if ($con1 || $con2){
                $temp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $temp;
            }
        }
    }
    
    // 取字符串 A1中的A或者1
    function getstr($str,$type=0){
        return substr($str, $type,1);
    }
    
    print_r($arr);
    echo array_shift($arr);
    
    /**
    
     *
    Array
    (
    [0] => C5
    [1] => B5
    [2] => B4
    [3] => D3
    [4] => B2
    [5] => C1
    [6] => B1
    [7] => A6
    [8] => A6
    [9] => A5
    [10] => A4
    [11] => A2
    [12] => A1
    )
     *
     *
    C5
     */
  • 相关阅读:
    java注解
    SpringBoot 整合 MybatisPlus 3.0
    第三章 列表简介
    第二章 变量及简单数据类型
    收藏通俗知识
    2017.8.13 列标,元组,字符串
    Python入门--4--分之和循环
    Python入门---易错已错易混淆----知识点
    Perl语言入门--4--函数
    perl学习之精髓中的精髓
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5131439.html
Copyright © 2020-2023  润新知