zoukankan      html  css  js  c++  java
  • php算--------法

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

    //菱形
    for($i=0;$i<=3;$i++){
    echo str_repeat(" ",3-$i);
    echo str_repeat("*",$i*2+1);
    echo '<br/>';
    }
    //冒泡
    $arr = array(1,3,5,32,756,2,6);
    $len = count($arr);
    ////print_r($len);die;
    ////这题从小到大,第一轮排最小,第二轮排第二小,第三轮排第三小,依次类推……
    for($i=0;$i<$len-1;$i++){
    for($j=$i+1;$j<$len;$j++) {
    if ($arr[$i] > $arr[$j]) {//从小到大
    $p = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $p;
    }
    }
    }
    print_r($arr);


    //在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式
    //思路:找到比要插入数大的那个位置,替换,然后把后面的数后移一位

    //方法一
    $in = 2;
    $arr = array(1,1,1,3,5,7);
    $n = count($arr);
    //如果要插入的数已经最大,直接打印
    if($arr[$n-1] < $in) {
    $arr[$n+1] = $in; //print_r($arr);
    }
    for($i=0; $i<$n; $i++) {
    //找出要插入的位置
    if($arr[$i] >= $in){
    $t1= $arr[$i];
    $arr[$i] = $in;
    //把后面的数据后移一位
    for($j=$i+1; $j<$n+1; $j++) {
    $t2 = $arr[$j];
    $arr[$j] = $t1;
    $t1 = $t2;
    }
    //打印
    print_r($arr);
    die;
    }
    }

    //方法二

    $in = 2;
    $arr = array(1,1,1,3,5,7);
    array_unshift($arr,$in);
    $len=count($arr);
    for($i=0;$i<$len-1;$i++){
    for($j=$i+1;$j<$len;$j++) {
    if ($arr[$i] > $arr[$j]) {//从小到大
    $p = $arr[$i];
    $arr[$i] = $arr[$j];
    $arr[$j] = $p;
    }
    }
    }
    print_r($arr);

    //快速排序
    //通过排序分成两部分,然后递归对这两部分排序,最后合并
    function q($array) {
    if (count($array) <= 1) {return $array;}
    //以$key为界,分成两个子数组
    $key = $array[0];
    $l = array();
    $r = array();
    //分别进行递归排序,然后合成一个数组
    for ($i=1; $i<count($array); $i++) {
    if ($array[$i] <= $key) { $l[] = $array[$i]; }
    else { $r[] = $array[$i]; }
    }
    $l = q($l);
    $r = q($r);
    return array_merge($l, array($key), $r);
    }
    $arr = array(1,2,44,3,4,33);
    print_r( q($arr) );

    //二分查找算法
    //以数组中某个值为界,再递归进行查找,直到结束
    function find($array, $low, $high, $k){
    if ($low <= $high){
    $mid = intval(($low+$high)/2);
    if ($array[$mid] == $k){
    return $mid;
    }elseif ($k < $array[$mid]){
    return find($array, $low, $mid-1, $k);
    }else{
    return find($array, $mid+1, $high, $k);
    }
    }
    die('Not have...');
    }
    $array = array(2,4,3,5);
    $n = count($array);
    $r = find($array,0,$n,5);


    //array_merge()妙用
    function t(){
    $c = func_num_args()-1;
    $a = func_get_args();
    //print_r($a);
    for($i=0; $i<=$c; $i++){
    if(is_array($a[$i])){
    for($j=0; $j<count($a[$i]); $j++){
    $r[] = $a[$i][$j];
    }
    } else {
    die('Not a array!');
    }
    }
    return $r;
    }
    //test
    print_r(t(range(1,4),range(1,4),range(1,4)));
    echo '<br/>';
    $a = array_merge(range(1,4),range(1,4),range(1,4));
    print_r($a);


    // 插入排序
    $data = array(6,13,21,99,18,2,25,33,19,84);
    $nums = count($data)-1;
    dump( $data );
    InsertionSort($data,$nums);
    dump( $data );
    function InsertionSort(& $arr,$n )
    {
    for( $i=1; $i<=$n; $i++ )
    {
    $tmp = $arr[$i];
    for( $j = $i; $j>0 && $arr[$j-1]>$tmp; $j-- )
    {
    $arr[$j] = $arr[$j-1];
    }
    $arr[$j] = $tmp;
    }
    }
    function dump( $d )
    {
    echo '<pre>';print_r($d);echo '</pre>';
    }


    //希尔排序
    $data = array(6,13,21,99,18,2,25,33,19,84);
    $nums = count($data);
    dump( $data );
    ShellSort($data,$nums);
    dump( $data );
    function ShellSort(& $arr,$n )
    {
    for( $increment = intval($n/2); $increment > 0; $increment = intval($increment/2) )
    {
    for( $i=$increment; $i<$n; $i++ )
    {
    $tmp = $arr[$i];
    for( $j = $i; $j>= $increment; $j -= $increment )
    if( $tmp < $arr[ $j-$increment ] )
    $arr[$j] = $arr[$j-$increment];
    else
    break;
    $arr[$j] = $tmp;
    }
    }
    }



    //快速排序
    $data = array(6,13,21,99,18,2,25,33,19,84);
    dump($data);
    quicks($data,0,count($data)-1);
    dump($data);
    function QuickSort(& $arr,$left,$right)
    {
    $l = $left;
    $r = $right;
    $pivot = intval(($r+$l)/2);
    $p = $arr[$pivot];
    do
    {
    while(($arr[$l] < $p) && ($l < $right))
    $l++;
    while(($arr[$r] > $p) && ($r > $left))
    $r--;
    if($l <= $r)
    {
    $temp = $arr[$l];
    $arr[$l] = $arr[$r];
    $arr[$r] = $temp;
    $l++;
    $r--;
    }
    }
    while($l <= $r);
    if($left < $r)
    QuickSort(&$arr,$left,$r);
    if($l < $right)
    QuickSort(&$arr,$l,$right);
    }


  • 相关阅读:
    mybatis判断字符串是否相等采坑记
    acm时加快cin和cout
    算法竞赛中的无穷大和无穷小
    Electron 安装、运行和项目搭建
    在线更新ubuntu 服务器补丁
    Cannot find module 'webpack/lib/RequestShortener'
    npm install --registry=https://registry.npm.taobao.org
    next InitializeSecurityContext failed
    npm安装typescript
    xmall
  • 原文地址:https://www.cnblogs.com/jiaoaozuoziji/p/7446851.html
Copyright © 2011-2022 走看看