php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】


Posted in PHP onNovember 10, 2016

本文实例讲述了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 相关文章推荐
使用php重新实现PHP脚本引擎内置函数
Mar 06 PHP
php自动跳转中英文页面
Jul 29 PHP
php正则过滤html标签、空格、换行符的代码(附说明)
Oct 25 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
Apr 20 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
PHP中IP地址与整型数字互相转换详解
Aug 20 PHP
PHP将字符分解为多个字符串的方法
Nov 22 PHP
php判断输入是否是纯数字,英文,汉字的方法
Mar 05 PHP
PHP会话处理的10个函数
Aug 11 PHP
ThinkPHP中where()使用方法详解
Apr 19 PHP
PHP 7安装调试工具Xdebug扩展的方法教程
Jun 17 PHP
PHP JWT初识及其简单示例
Oct 10 PHP
PHP数组生成XML格式数据的封装类实例
Nov 10 #PHP
Linux平台php命令行程序处理管道数据的方法
Nov 10 #PHP
PHP中功能强大却很少使用的函数实例小结
Nov 10 #PHP
php事件驱动化设计详解
Nov 10 #PHP
PHP的消息通信机制测试实例
Nov 10 #PHP
PHP使用GD库输出汉字的方法【测试可用】
Nov 10 #PHP
Yii2框架RESTful API 格式化响应,授权认证和速率限制三部分详解
Nov 10 #PHP
You might like
解析PHP强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php过滤html标记属性类用法实例
2014/09/23 PHP
php视频拍照上传头像功能实现代码分享
2015/10/08 PHP
laravel项目利用twemproxy部署redis集群的完整步骤
2018/05/11 PHP
PHP常量define和const的区别详解
2019/05/18 PHP
JavaScript 事件属性绑定带参数的函数
2009/03/13 Javascript
javascript ie6兼容position:fixed实现思路
2013/04/01 Javascript
javascript数组操作(创建、元素删除、数组的拷贝)
2014/04/07 Javascript
jQuery取id有.的值的方法
2014/05/21 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
2014/12/05 Javascript
jQuery中clone()方法用法实例
2015/01/16 Javascript
JQuery操作元素的css样式
2015/03/09 Javascript
JQuery实现网页右侧随动广告特效
2016/01/17 Javascript
jQuery.form.js插件不能解决连接超时(timeout)的原因分析及解决方法
2016/10/14 Javascript
Node.js下自定义错误类型详解
2016/10/17 Javascript
基于jquery实现的银行卡号每隔4位自动插入空格的实现代码
2016/11/22 Javascript
js获取隐藏元素的宽高
2017/02/24 Javascript
Angular中ng-repeat与ul li的多层嵌套重复问题
2017/07/24 Javascript
Angular通过angular-cli来搭建web前端项目的方法
2017/07/27 Javascript
基于Node.js实现压缩和解压缩的方法
2018/02/13 Javascript
Vue-input框checkbox强制刷新问题
2019/04/18 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
JS面向对象编程基础篇(二) 封装操作实例详解
2020/03/03 Javascript
Python牛刀小试密码爆破
2011/02/03 Python
python 获取list特定元素下标的实例讲解
2018/04/09 Python
python爬取哈尔滨天气信息
2018/07/14 Python
使用EduBlock轻松学习Python编程
2018/10/08 Python
python爬虫简单的添加代理进行访问的实现代码
2019/04/04 Python
Python 求向量的余弦值操作
2021/03/04 Python
印度尼西亚综合购物网站:Lazada印尼
2016/09/07 全球购物
高中毕业的自我鉴定
2013/12/09 职场文书
会计专业的自荐信
2013/12/12 职场文书
自荐信需注意事项
2014/01/25 职场文书
关爱留守儿童捐款倡议书
2015/04/27 职场文书
小学运动会通讯稿
2015/07/18 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书