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 无限级数据JSON格式及JS解析
Jul 17 PHP
基于PHP异步执行的常用方式详解
Jun 03 PHP
解析php中如何直接执行SHELL
Jun 28 PHP
迅速确定php多维数组的深度的方法
Jan 07 PHP
php实现的九九乘法口诀表简洁版
Jul 28 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
Nov 14 PHP
PHP使用mkdir创建多级目录的方法
Dec 22 PHP
基于PHP技术开发客服工单系统
Jan 06 PHP
Laravel中Trait的用法实例详解
Mar 16 PHP
php版微信公众平台接口参数调试实现判断用户行为的方法
Sep 23 PHP
PHP+Redis事务解决高并发下商品超卖问题(推荐)
Aug 03 PHP
详解Laravel框架的依赖注入功能
May 27 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安装全攻略:APACHE
2006/10/09 PHP
如何做到多笔资料的同步
2006/10/09 PHP
单一index.php实现PHP任意层级文件夹遍历(Zjmainstay原创)
2012/07/31 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
详解PHP序列化反序列化的方法
2015/10/27 PHP
ThinkPHP设置禁止百度等搜索引擎转码(简单实用)
2016/02/15 PHP
Javascript 实用小技巧
2010/04/07 Javascript
基于jQuery实现的百度导航li拖放排列效果,即时更新数据库
2012/07/31 Javascript
JavaScript判断DOM何时加载完毕的技巧
2012/11/11 Javascript
jqGrid增加时--判断开始日期与结束日期(实例解析)
2013/11/08 Javascript
JS中的form.submit()不能提交表单的错误原因
2014/10/08 Javascript
jquery任意位置浮动固定层插件用法实例
2015/05/29 Javascript
JavaScript重载函数实例剖析
2016/05/13 Javascript
扩展Bootstrap Tooltip插件使其可交互的方法
2016/11/07 Javascript
最全正则表达式总结:验证QQ号、手机号、Email、中文、邮编、身份证、IP地址等
2017/08/16 Javascript
vue封装第三方插件并发布到npm的方法
2017/09/25 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
详解小程序rich-text对富文本支持方案
2018/11/28 Javascript
layui自定义工具栏的方法
2019/09/19 Javascript
JS this关键字在ajax中使用出现问题解决方案
2020/07/17 Javascript
JavaScript 中的六种循环方法
2021/01/06 Javascript
用Python编写简单的定时器的方法
2015/05/02 Python
分析用Python脚本关闭文件操作的机制
2015/06/28 Python
Python实现PS图像调整黑白效果示例
2018/01/25 Python
python 模拟贷款卡号生成规则过程解析
2019/08/30 Python
通过python检测字符串的字母
2020/02/18 Python
scrapy处理python爬虫调度详解
2020/11/23 Python
python获取天气接口给指定微信好友发天气预报
2020/12/28 Python
美国花园雕像和家居装饰网上商店:Design Toscano
2019/03/09 全球购物
What's the difference between deep copy and shallow copy? (深拷贝与浅拷贝有什么区别)
2015/11/10 面试题
教师通用专业自荐书范文
2014/02/11 职场文书
跟单业务员岗位职责
2014/03/08 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
2014年办公室主任工作总结
2014/11/12 职场文书
优秀团员主要事迹范文
2015/11/05 职场文书
gojs实现蚂蚁线动画效果
2022/02/18 Javascript