当前位置:首页 > PHP教程 > php数组 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2016-08-30 14:28:58 浏览: 评论:0 

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

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

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

PHP代码之:

  1. <?php 
  2.     function sort_arr($a,$b) { 
  3.         $temp = array(); 
  4.         while ($a&&$b) { 
  5.             if($a['0']<$b['0']) {  
  6.                 $temp[] = array_shift($a);  
  7.             } else {  
  8.                 $temp[] = array_shift($b);  
  9.             }  //phpfensi.com 
  10.         }  
  11.         if(!emptyempty($a)) { $temp = array_merge($temp$a); }  
  12.         if(!emptyempty($b)) { $temp = array_merge($temp$b); }  
  13.         return $temp;  
  14.     }  
  15.     $a = array(1,2,3,4,5,6);  
  16.     $b = array(2,3,4,10,10,10,10);  
  17.     sort_arr($a$b);  
  18. ?> 

Python 代码之:

  1. def fib(a,b): 
  2.     len_a = len(a) 
  3.     c = [] 
  4.     while len(a) and len(b): 
  5.         if a[0] > b[0]: 
  6.             c.append(b.pop(0)) 
  7.         else
  8.             c.append(a.pop(0)) 
  9.       
  10.     if len(a): 
  11.         c = c+a   
  12.       
  13.     if len(b): 
  14.         c = c+b 
  15.  
  16.     i=0 
  17.     while i<len(c): 
  18.         print(c[i]) 
  19.         i = i+1      
  20.  
  21.  
  22. a = [1,2,3,4,5
  23. b = [2,3,4,5,6,7,8,9
  24.  
  25. fib(a,b) 

C代码之:

  1. #include &amp;lt;stdio.h&amp;gt;; 
  2. int *sort(int a[], int b[], int a_len, int b_len) { 
  3.     int *temp = malloc(a_len+b_len); 
  4.  
  5.     int i=0; //标注a数组 
  6.     int j=0; //标注b数组 
  7.     int m=0; //标注新数组 
  8.       
  9.     while (i&amp;lt;a_len&amp;amp;&amp;amp;j&amp;lt;b_len) { //重新排序 if(a[i]&amp;lt;b[j]) { 
  10.             temp[m++] = b[j++]; 
  11.         } else { 
  12.             temp[m++] = a[i++]; 
  13.         } 
  14.     } 
  15.       
  16.     //将剩余的数字放在新数组后面(剩余的肯定是前面的数字大) 
  17.     if(i&amp;lt;a_len) { 
  18.         for (; i&amp;lt;a_len; i++) { 
  19.             temp[m++] = a[i]; 
  20.         } 
  21.     } 
  22.     if(j&amp;lt;b_len) { 
  23.         for (; j&amp;lt;b_len; j++) { 
  24.             temp[m++] = b[j]; 
  25.         } 
  26.     } 
  27.       
  28.     return temp; 
  29.  
  30. int main(int argc, const char * argv[]) { 
  31.     int a[4] = {2,3,11,89}; 
  32.     int b[6] = {4,6,9,10,22,55}; 
  33.       
  34.     int a_len = sizeof(a) / sizeof(a[0]); 
  35.     int b_len = sizeof(b) / sizeof(b[0]); 
  36.       
  37.     int *c = sort(a, b, a_len, b_len); 
  38.       
  39.     int y = 0; 
  40.     for (; y&amp;lt;a_len+b_len; y++) { 
  41.         printf("%d ", c[y]); 
  42.     } 
  43.       
  44.     return 0; 

GO代码之:

  1. package main 
  2.  
  3. import "fmt" 
  4.  
  5. func main() { 
  6.     var a = [5]int{1, 2, 3, 4, 5} 
  7.     var b = [8]int{4, 5, 6, 7, 89, 100, 111, 112} 
  8.     var len_a = len(a) 
  9.     var len_b = len(b) 
  10.     var c = make([]int, len_a+len_b) 
  11.  
  12.     var j = 0 //标注a数组 
  13.     var k = 0 //标注b数组 
  14.     var h = 0 //标注新数组 
  15.  
  16.           
  17.     for j &amp;lt; len_a &amp;amp;&amp;amp; k &amp;lt; len_b {  
  18.         if a[j] &amp;gt; b[k] { 
  19.             c[h] = b[k] 
  20.             h++ 
  21.             k++ 
  22.         } else { 
  23.             c[h] = a[j] 
  24.             h++ 
  25.             j++ 
  26.         } 
  27.     } 
  28.  
  29.     if j &amp;lt; len_a { 
  30.         for i := j; i &amp;lt; len_a; i++ { 
  31.             c[h] = a[i] 
  32.             h++ 
  33.         } 
  34.     } 
  35.  
  36.     if k &amp;lt; len_b { 
  37.         for i := k; i &amp;lt; len_b; i++ { 
  38.             c[h] = b[i] 
  39.             h++ 
  40.         } 
  41.     } 
  42.  
  43.     Print(c, "c"
  44.  
  45.  
  46. /** 
  47.  * [Print array] 
  48.  * @param {[type]} o    []int  [array] 
  49.  * @param {[type]} name string [array name] 
  50.  */ 
  51. func Print(o []int, name string) { 
  52.     fmt.Printf("%s: ", name) 
  53.  
  54.     for _, v := range o { 
  55.         fmt.Printf("%d ", v) 
  56.     } 
  57.  
  58.     fmt.Printf("\n"

Tags: php数组排序 php数组打印

分享到: