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

有序的数组打印或排序对于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. if len(a):
  10. c = c+a
  11. if len(b):
  12. c = c+b
  13. i=0
  14. while i<len(c):
  15. print(c[i])
  16. i = i+1
  17. a = [1,2,3,4,5]
  18. b = [2,3,4,5,6,7,8,9]
  19. 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. int i=0; //标注a数组
  5. int j=0; //标注b数组
  6. int m=0; //标注新数组
  7. while (i&amp;lt;a_len&amp;amp;&amp;amp;j&amp;lt;b_len) { //重新排序 if(a[i]&amp;lt;b[j]) {
  8. temp[m++] = b[j++];
  9. } else {
  10. temp[m++] = a[i++];
  11. }
  12. }
  13. //将剩余的数字放在新数组后面(剩余的肯定是前面的数字大)
  14. if(i&amp;lt;a_len) {
  15. for (; i&amp;lt;a_len; i++) {
  16. temp[m++] = a[i];
  17. }
  18. }
  19. if(j&amp;lt;b_len) {
  20. for (; j&amp;lt;b_len; j++) {
  21. temp[m++] = b[j];
  22. }
  23. }
  24. return temp;
  25. }
  26. int main(int argc, const char * argv[]) {
  27. int a[4] = {2,3,11,89};
  28. int b[6] = {4,6,9,10,22,55};
  29. int a_len = sizeof(a) / sizeof(a[0]);
  30. int b_len = sizeof(b) / sizeof(b[0]);
  31. int *c = sort(a, b, a_len, b_len);
  32. int y = 0;
  33. for (; y&amp;lt;a_len+b_len; y++) {
  34. printf("%d ", c[y]);
  35. }
  36. return 0;
  37. }

GO代码之:

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