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执行速度全攻略(下)
Oct 09 PHP
用PHP中的 == 运算符进行字符串比较
Nov 26 PHP
php set_time_limit()函数的使用详解
Jun 05 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
ThinkPHP3.1新特性之G方法的使用
Jun 19 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
php实现的mongodb操作类实例
Apr 03 PHP
php实现模拟post请求用法实例
Jul 11 PHP
yii2分页之实现跳转到具体某页的实例代码
Jun 02 PHP
thinkPHP商城公告功能开发问题分析
Dec 01 PHP
PHP 7.0新增加的特性介绍
Jun 08 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
Feb 07 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/09/14 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
示例详解Laravel的注册重构
2016/08/14 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
PHP实现的操作数组类库定义与用法示例
2019/05/24 PHP
js的闭包的一个示例说明
2008/11/18 Javascript
style、 currentStyle、 runtimeStyle区别分析
2010/08/01 Javascript
ReactNative页面跳转实例代码
2016/09/27 Javascript
非常实用的vue导航钩子
2017/03/20 Javascript
zTree jQuery 树插件的使用(实例讲解)
2017/09/25 jQuery
vue+iview+less+echarts实战项目总结
2018/02/22 Javascript
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
ES6学习笔记之let与const用法实例分析
2020/01/22 Javascript
JS中FileReader类实现文件上传及时预览功能
2020/03/27 Javascript
Django URL传递参数的方法总结
2016/08/28 Python
python3实现ftp服务功能(服务端 For Linux)
2017/03/24 Python
python 对象和json互相转换方法
2018/03/22 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
使用numba对Python运算加速的方法
2018/10/15 Python
Python对象与引用的介绍
2019/01/24 Python
python中正则表达式与模式匹配
2019/05/07 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
基于python二叉树的构造和打印例子
2019/08/09 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Python2与Python3的区别详解
2020/02/09 Python
python实现提取str字符串/json中多级目录下的某个值
2020/02/27 Python
Python RabbitMQ实现简单的进程间通信示例
2020/07/02 Python
CSS3系列教程:背景图片(背景大小和多背景图) 应用说明
2012/12/19 HTML / CSS
Waterford美国官网:爱尔兰水晶制品品牌
2017/04/26 全球购物
const char*, char const*, char*const的区别是什么
2014/07/09 面试题
阿里巴巴Oracle DBA笔试题答案-备份恢复类
2013/11/20 面试题
电子商务专业应届生求职信
2014/05/28 职场文书
2014市府办领导班子“四风问题”对照检查材料思想汇报
2014/09/24 职场文书
JavaScript原始值与包装对象的详细介绍
2021/05/11 Javascript
pandas中DataFrame检测重复值的实现
2021/05/26 Python