php有序数组的使用方法

时间:2016-11-11153举报小编:youjiejie

    php有序数组的使用方法,本文主要介绍了php实现有序数组打印或排序的方法,涉及php针对数组的遍历、判断、构造与合并等常用操作技巧,并附带了Python、C及Go语言的实现代码,需要的朋友可以参考下

    本文实例讲述了php实现有序数组打印或排序的方法。分享给大家供大家参考,具体如下:

    有序的数组打印或排序对于php来讲非常的简单了这里整理了几个不同语言的做法的实现代码,具体的我们一起来看这篇php中有序的数组打印或排序的例子吧.

    最近有个面试题挺火的——把2个有序的数组打印或排序,刚看到这个题的时候也有点蒙,最优的算法肯定要用到有序的特性.

    思考了一会发现也不是很难,假如数组是正序排列的,可以同时遍历2个数组,将小的值进行排序,最后会遍历完一个数组,留下一个非空数组,而且剩下的值肯定大于等于已经排好序的最大值.

    PHP代码:

    <?php
      function sort_arr($a,$b) {
        $temp = array();
        while ($a&&$b) {
          if($a['0']<$b['0']) {
            $temp[] = array_shift($a);
          } else {
            $temp[] = array_shift($b);
          }
        }
        if(!emptyempty($a)) { $temp = array_merge($temp, $a); }
        if(!emptyempty($b)) { $temp = array_merge($temp, $b); }
        return $temp;
      }
      $a = array(1,2,3,4,5,6);
      $b = array(2,3,4,10,10,10,10);
      sort_arr($a, $b);
    ?>

    运行得到的新数组为:

    Array
    (
      [0] => 1
      [1] => 2
      [2] => 2
      [3] => 3
      [4] => 3
      [5] => 4
      [6] => 4
      [7] => 5
      [8] => 6
      [9] => 10
      [10] => 10
      [11] => 10
      [12] => 10
    )

    其他语言实现代码:

    Python 代码:

    def fib(a,b):
      len_a = len(a)
      c = []
      while len(a) and len(b):
        if a[0] > b[0]:
          c.append(b.pop(0))
        else:
          c.append(a.pop(0))
      if len(a):
        c = c+a
      if len(b):
        c = c+b
      i=0
      while i<len(c):
        print(c[i])
        i = i+1
    a = [1,2,3,4,5]
    b = [2,3,4,5,6,7,8,9]
    fib(a,b)

    C代码:

    #include &lt;stdio.h&gt;;
    int *sort(int a[], int b[], int a_len, int b_len) {
      int *temp = malloc(a_len+b_len);
      int i=0; //标注a数组
      int j=0; //标注b数组
      int m=0; //标注新数组
      while (i&lt;a_len&amp;&amp;j&lt;b_len) { //重新排序 if(a[i]&lt;b[j]) {
          temp[m++] = b[j++];
        } else {
          temp[m++] = a[i++];
        }
      }
      //将剩余的数字放在新数组后面(剩余的肯定是前面的数字大)
      if(i&lt;a_len) {
        for (; i&lt;a_len; i++) {
          temp[m++] = a[i];
        }
      }
      if(j&lt;b_len) {
        for (; j&lt;b_len; j++) {
          temp[m++] = b[j];
        }
      }
      return temp;
    }
    int main(int argc, const char * argv[]) {
      int a[4] = {2,3,11,89};
      int b[6] = {4,6,9,10,22,55};
      int a_len = sizeof(a) / sizeof(a[0]);
      int b_len = sizeof(b) / sizeof(b[0]);
      int *c = sort(a, b, a_len, b_len);
      int y = 0;
      for (; y&lt;a_len+b_len; y++) {
        printf("%d ", c[y]);
      }
      return 0;
    }

    GO代码:

    package main
    import "fmt"
    func main() {
        var a = [5]int{1, 2, 3, 4, 5}
        var b = [8]int{4, 5, 6, 7, 89, 100, 111, 112}
        var len_a = len(a)
        var len_b = len(b)
        var c = make([]int, len_a+len_b)
        var j = 0 //标注a数组
        var k = 0 //标注b数组
        var h = 0 //标注新数组
        for j &lt; len_a &amp;&amp; k &lt; len_b {
            if a[j] &gt; b[k] {
                c[h] = b[k]
                h++
                k++
            } else {
                c[h] = a[j]
                h++
                j++
            }
        }
        if j &lt; len_a {
            for i := j; i &lt; len_a; i++ {
                c[h] = a[i]
                h++
            }
        }
        if k &lt; len_b {
            for i := k; i &lt; len_b; i++ {
                c[h] = b[i]
                h++
            }
        }
        Print(c, "c")
    }
    /**
     * [Print array]
     * @param {[type]} o    []int  [array]
     * @param {[type]} name string [array name]
     */
    func Print(o []int, name string) {
        fmt.Printf("%s: ", name)
        for _, v := range o {
            fmt.Printf("%d ", v)
        }
        fmt.Printf("\n")
    }

    好了,这就是php有序数组的使用方法的全部内容,希望本文所述对大家PHP程序设计有所帮助。