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 相关文章推荐
笑谈配置,使用Smarty技术
Jan 04 PHP
PHP Memcached + APC + 文件缓存封装实现代码
Mar 11 PHP
获取PHP警告错误信息的解决方法
Jun 03 PHP
解析yii数据库的增删查改
Jun 20 PHP
php中的比较运算符详解
Oct 28 PHP
PHP定时更新程序设计思路分享
Jun 10 PHP
PHP开发框架kohana中处理ajax请求的例子
Jul 14 PHP
ThinkPHP实例化模型的四种方法概述
Aug 22 PHP
Symfony2创建页面实例详解
Mar 18 PHP
PHP中FTP相关函数小结
Jul 15 PHP
Laravel5中防止XSS跨站攻击的方法
Oct 10 PHP
php 猴子摘桃的算法
Jun 20 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中去掉字符串首尾空格的方法
2012/05/19 PHP
PHP循环输出指定目录下的所有文件和文件夹路径例子(简单实用)
2014/05/10 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
PHP定时执行任务的3种方法详解
2015/12/21 PHP
PHP unlink与rmdir删除目录及目录下所有文件实例代码
2018/02/07 PHP
详解php用static方法的原因
2018/09/12 PHP
JavaScript 联动的无限级封装类,数据采用非Ajax方式,随意添加联动
2010/06/29 Javascript
jQuery自定义事件的简单实现代码
2014/01/27 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
JS添加删除DIV的简单实例
2016/07/08 Javascript
js检查是否关闭浏览器的方法
2016/08/02 Javascript
js实现登录验证码
2016/12/22 Javascript
彻底学会Angular.js中的transclusion
2017/03/12 Javascript
详解nodejs实现本地上传图片并预览功能(express4.0+)
2017/06/28 NodeJs
使用webpack3.0配置webpack-dev-server教程
2018/05/29 Javascript
详解微信小程序与内嵌网页交互实现支付功能
2018/10/22 Javascript
vue实现节点增删改功能
2019/09/26 Javascript
JavaScript基于面向对象实现的无缝滚动轮播示例
2020/01/17 Javascript
微信小程序自定义扫码功能界面的实现代码
2020/07/02 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
[57:59]EG vs Secret 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python常用模块用法分析
2014/09/08 Python
Python中利用sorted()函数排序的简单教程
2015/04/27 Python
python通过apply使用元祖和列表调用函数实例
2015/05/26 Python
详解python 拆包可迭代数据如tuple, list
2017/12/29 Python
python+splinter自动刷新抢票功能
2018/09/25 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python StringIO如何在内存中读写str
2020/01/07 Python
Django中的AutoField字段使用
2020/05/18 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
获奖的大学生创业计划书
2014/01/05 职场文书
调研汇报材料范文
2014/08/17 职场文书
2014年企业党支部工作总结
2014/12/04 职场文书
2019年市场部个人述职报告(三篇)
2019/10/23 职场文书
Python 批量下载阴阳师网站壁纸
2021/05/19 Python
分享一些Java的常用工具
2021/06/11 Java/Android