Welcome

首页 / 网页编程 / PHP / php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】

本文实例讲述了php实现有序数组打印或排序的方法。分享给大家供大家参考,具体如下:
有序的数组打印或排序对于php来讲非常的简单了这里整理了几个不同语言的做法的实现代码,具体的我们一起来看这篇php中有序的数组打印或排序的例子吧.
最近有个面试题挺火的——把2个有序的数组打印或排序,刚看到这个题的时候也有点蒙,最优的算法肯定要用到有序的特性.
思考了一会发现也不是很难,假如数组是正序排列的,可以同时遍历2个数组,将小的值进行排序,最后会遍历完一个数组,留下一个非空数组,而且剩下的值肯定大于等于已经排好序的最大值.
PHP代码:
<?phpfunction 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+aif len(b):c = c+bi=0while i<len(c):print(c[i])i = i+1a = [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(" ")
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP针对XML文件操作技巧总结》、《PHP错误与异常处理方法总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。