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脚本的10个技巧(3)
Oct 09 PHP
php htmlentities和htmlspecialchars 的区别
Aug 18 PHP
PHP session有效期问题
Apr 26 PHP
php获取后台Job管理的实现代码
Jun 10 PHP
PHP array操作10个小技巧分享
Jun 23 PHP
PHP的构造方法,析构方法和this关键字详细介绍
Oct 22 PHP
PHP字符串的连接的简单实例
Dec 30 PHP
php生成静态页面的简单示例
Apr 17 PHP
destoon利用Rewrite规则设置网站安全
Jun 21 PHP
PHP编程开发怎么提高编程效率 提高PHP编程技术
Nov 09 PHP
PHP实现redis限制单ip、单用户的访问次数功能示例
Jun 16 PHP
PHP文件操作简单介绍及函数汇总
Dec 11 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中mysql模块部分功能的简单封装
2011/09/30 PHP
遭遇php的in_array低性能问题
2013/09/17 PHP
高质量PHP代码的50个实用技巧必备(上)
2016/01/22 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
php进程daemon化的正确实现方法
2018/09/06 PHP
laravel 修改.htaccess文件 重定向public的解决方法
2019/10/12 PHP
js实现带圆角的两级导航菜单效果代码
2015/08/24 Javascript
JavaScript常用函数工具集:lao-utils
2016/03/01 Javascript
JS实战篇之收缩菜单表单布局
2016/12/10 Javascript
Bootstrap警告(Alerts)的实现方法
2017/03/22 Javascript
nodejs个人博客开发第五步 分配数据
2017/04/12 NodeJs
基于VUE移动音乐WEBAPP跨域请求失败的解决方法
2018/01/16 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
vue 做移动端微信公众号采坑经验记录
2018/04/26 Javascript
在ES5与ES6环境下处理函数默认参数的实现方法
2018/05/13 Javascript
JavaScript实现页面中录音功能的方法
2019/06/04 Javascript
JavaScript中的ES6 Proxy的具体使用
2019/06/16 Javascript
原生javascript自定义input[type=radio]效果示例
2019/08/27 Javascript
如何正确理解vue中的key详解
2019/11/02 Javascript
Python入门篇之面向对象
2014/10/20 Python
Python实现中文数字转换为阿拉伯数字的方法示例
2017/05/26 Python
详解python实现线程安全的单例模式
2018/03/05 Python
详解Python中的type和object
2018/08/15 Python
python动态进度条的实现代码
2019/07/03 Python
Python在cmd上打印彩色文字实现过程详解
2019/08/07 Python
django admin管理工具自定义时间区间筛选器DateRangeFilter介绍
2020/05/19 Python
python 爬取免费简历模板网站的示例
2020/09/27 Python
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
css3学习心得分享
2013/08/19 HTML / CSS
离职保密承诺书
2014/05/28 职场文书
社区健康教育工作方案
2014/06/03 职场文书
房地产资料员岗位职责
2014/07/02 职场文书
党的群众路线教育实践活动个人整改措施材料
2014/11/04 职场文书
辞职信模板(中英文版)
2015/02/27 职场文书
交通安全教育主题班会
2015/08/12 职场文书