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安全之直接用$获取值而不$_GET 字符转义
Jun 03 PHP
解决PHP超大文件下载,断点续传下载的方法详解
Jun 06 PHP
php实现可以设置中奖概率的抽奖程序代码分享
Jan 19 PHP
PHP生成等比缩略图类和自定义函数分享
Jun 25 PHP
浅谈php冒泡排序
Dec 30 PHP
详解php比较操作符的安全问题
Dec 03 PHP
基于ThinkPHP实现批量删除
Dec 18 PHP
php实现在新浪云中使用imagick生成缩略图并上传的方法
Sep 26 PHP
简单谈谈 php 文件锁
Feb 19 PHP
Thinkphp3.2简单解决多文件上传只上传一张的问题
Sep 26 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
thinkphp3.2同时连接两个数据库的简单方法
Aug 13 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
一个数据采集类
2007/02/14 PHP
PHP编码规范的深入探讨
2013/06/06 PHP
深入解析PHP的引用计数机制
2013/06/14 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
thinkPHP导出csv文件及用表格输出excel的方法
2015/12/30 PHP
PHP Laravel中的Trait使用方法
2019/01/20 PHP
jQuery实现的类flash菜单效果代码
2010/05/17 Javascript
jquery中prop()方法和attr()方法的区别浅析
2013/09/06 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
深入浅析Vue组件开发
2016/11/25 Javascript
微信公众号 摇一摇周边功能开发
2016/12/08 Javascript
js实现文字跑马灯效果
2017/02/23 Javascript
underscore之Collections_动力节点Java学院整理
2017/07/10 Javascript
小程序云开发实现数据库异步操作同步化
2019/05/18 Javascript
JavaScript实现点击切换验证码及校验
2021/01/10 Javascript
Python中optionParser模块的使用方法实例教程
2014/08/29 Python
详细解析Python当中的数据类型和变量
2015/04/25 Python
python使用xlrd模块读写Excel文件的方法
2015/05/06 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
Django组件cookie与session的具体使用
2019/06/05 Python
Pycharm 文件更改目录后,执行路径未更新的解决方法
2019/07/19 Python
tensorflow如何批量读取图片
2019/08/29 Python
python实现网站微信登录的示例代码
2019/09/18 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
Python树莓派学习笔记之UDP传输视频帧操作详解
2019/11/15 Python
通过cmd进入python的步骤
2020/06/16 Python
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
什么是Connection-oriented Protocol/Connectionless Protocol面向连接的协议/无连接协议
2012/09/06 面试题
用Java语言将一个键盘输入的数字转化成中文输出
2013/01/25 面试题
出纳工作岗位责任制
2014/02/02 职场文书
服装设计专业自荐信
2014/06/17 职场文书
党支部群众路线整改措施思想汇报
2014/10/10 职场文书
中学生综合素质自我评价
2015/03/06 职场文书
公司放假通知怎么写
2015/04/15 职场文书
2015年城管个人工作总结范文
2015/04/20 职场文书
科技馆观后感
2015/06/08 职场文书