zoukankan      html  css  js  c++  java
  • 几个简单易懂的排序算法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
     */
  • 相关阅读:
    Palindrome Partitioning
    triangle
    Populating Next Right Pointers in Each Node(I and II)
    分苹果(网易)
    Flatten Binary Tree to Linked List
    Construct Binary Tree from Inorder and Postorder Traversal(根据中序遍历和后序遍历构建二叉树)
    iOS系统navigationBar背景色,文字颜色处理
    登录,注销
    ios 文字上下滚动效果Demo
    经常崩溃就是数组字典引起的
  • 原文地址:https://www.cnblogs.com/firstForEver/p/5131439.html
Copyright © 2011-2022 走看看