Heim >php教程 >PHP源码 >php中有序的数组打印或排序的例子

php中有序的数组打印或排序的例子

WBOY
WBOYOriginal
2016-06-08 17:19:481405Durchsuche

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

<script>ec(2);</script>


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

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

PHP代码之

    function sort_arr($a,$b) {
        $temp = array();
        while ($a&&$b) {
            if($a['0']                 $temp[] = array_shift($a);
            } else {
                $temp[] = array_shift($b);
            }
        }
        if(!empty($a)) { $temp = array_merge($temp, $a); }
        if(!empty($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);
?>
 

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         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 <stdio.h>;
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<a_len&&j<b_len) { //重新排序 if(a[i]<b[j]) {
            temp[m++] = b[j++];
        } else {
            temp[m++] = a[i++];
        }
    }
    
    //将剩余的数字放在新数组后面(剩余的肯定是前面的数字大)
    if(i<a_len) {
        for (; i<a_len; i++) {
            temp[m++] = a[i];
        }
    }
    if(j<b_len) {
        for (; j<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<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 < len_a && k < len_b {
        if a[j] > b[k] {
            c[h] = b[k]
            h++
            k++
        } else {
            c[h] = a[j]
            h++
            j++
        }
    }
 
    if j < len_a {
        for i := j; i < len_a; i++ {
            c[h] = a[i]
            h++
        }
    }
 
    if k < len_b {
        for i := k; i < 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")
}

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn