zoukankan      html  css  js  c++  java
  • php 冒泡排序 快速排序

    <?php

    /******

    1. 冒泡排序:两两交换数值,最小的值在最左边,就如最轻的气泡在最上边。对整列数两两交换一次,最小的数在最左边,每次都能得一个在剩下的数中的最小 的数,“冒”出来的数组成一个有序区间,剩下的值组成一无序区间,且有序区间中每一元素值都比无序区间的小。  
    2.   
    3. 快速排序:基准数,左右二个数组,递归调用,合并。  
    4.   
    5. 插入排序:排序区间分成二部分,左边有序,右边无序,从右区间取第一个元素插入左区间,若此元素比左边区间最右边的元素大,留在原处,若此元素比左 边区间最右边的元素小,则插在最右边元素的原位置,同时最右边元素右移一位,计算器减一,重新和前面的元素比较,直到前面的元素比要插入元素小为止,重复 上述步骤。  
    6.   
    7. 注意区间端点值的处理,及数组的第一个元素下标为0.

    ***/

    $a=array('3','8','1','4','11','7');
    print_r($a);
    $len = count($a);
    //从小到大
    for($i=1;$i<$len;$i++)
    {
    for($j=$len-1;$j>=$i;$j--)
    if($a[$j]<$a[$j-1])
    {//如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
     $x=$a[$j];
     $a[$j]=$a[$j-1];
     $a[$j-1]=$x;
    }
    }
    print_r($a);j

    //另一种方法 从小到大

    $b=array('4','3','8','9','2','1');
    $len=count($b);
    for($k=1;$k<$len;$k++)
    {
    for($j=$len-1,$i=0;$i<$len-$k;$i++,$j--)
    if($b[$j]<$b[$j-1]){

    //如果是从大到小的话,只要在这里的判断改成if($b[$j]>$b[$j-1])就可以了
     $tmp=$b[$j];
     $b[$j]=$b[$j-1];
     $b[$j-1]=$tmp;
    }
    print_r($b);
    echo "<br>";
    }

    //下面的这个执行效率更高

    function maopao($arr)
    {
     $len = count($arr);
     for($i=1; $i<$len;$i++)//最多做n-1趟排序
     {
      $flag =false;   //本趟排序开始前,交换标志应为假
      for($j=$len-1;$j>=$i;$j--)
      {
       if($arr[$j]<$arr[$j-1])//交换记录
       {//如果是从大到小的话,只要在这里的判断改成if($arr[$j]>$arr[$j-1])就可以了
        $x=$arr[$j];
        $arr[$j]=$arr[$j-1];
        $arr[$j-1]=$x;
        $flag = true;//发生了交换,故将交换标志置为真
       }
      }
      if(!$flag)//本趟排序未发生交换,提前终止算法
      return$arr;   
     }
    }
    $shuz = array('2','4','1','8','5');
    $bb = maopao($shuz);
    print_r($bb);

    // 快速排序
    function kuaisu($arr){
        $len =count($arr);
        if($len<= 1){
           return $arr;
        }
        $key =$arr[0];
        $left_arr =array();
        $right_arr =array();
        for($i=1;$i<$len;$i++){
           if($arr[$i] <= $key){
               $left_arr[] = $arr[$i];
           }else{
               $right_arr[] = $arr[$i];
           }
        }
        $left_arr =kuaisu($left_arr);
        $right_arr =kuaisu($right_arr);
        returnarray_merge($left_arr, array($key), $right_arr);
    }
    $arr = array(23,98,54,2,9,62,34);
    print_r(kuaisu($arr));
    ?>

  • 相关阅读:
    Python常用模块——第三方开源模块的安装使用
    Python常用模块——模块介绍与导入
    Linux文本编辑器vim
    Linux文件和文件夹的操作
    网络编程之IO模型——selectors模块
    设计模式学习(19)- 中介者模式
    设计模式学习(18)- 迭代器模式
    设计模式学习(17)- 解释器模式
    设计模式学习(16)- 命令模式
    设计模式学习(15)- 责任链模式
  • 原文地址:https://www.cnblogs.com/sunscheung/p/4839418.html
Copyright © 2011-2022 走看看