php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
本文实例讲述了php实现有序数组打印或排序的方法。分享给大家供大家参考,具体如下:
有序的数组打印或排序对于php来讲非常的简单了这里整理了几个不同语言的做法的实现代码,具体的我们一起来看这篇php中有序的数组打印或排序的例子吧.
最近有个面试题挺火的——把2个有序的数组打印或排序,刚看到这个题的时候也有点蒙,最优的算法肯定要用到有序的特性.
思考了一会发现也不是很难,假如数组是正序排列的,可以同时遍历2个数组,将小的值进行排序,最后会遍历完一个数组,留下一个非空数组,而且剩下的值肯定大于等于已经排好序的最大值.
PHP代码:
<?php
functionsort_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代码:
deffib(a,b): len_a=len(a) c=[] whilelen(a)andlen(b): ifa[0]>b[0]: c.append(b.pop(0)) else: c.append(a.pop(0)) iflen(a): c=c+a iflen(b): c=c+b i=0 whilei<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(inta[],intb[],inta_len,intb_len){
int*temp=malloc(a_len+b_len);
inti=0;//标注a数组
intj=0;//标注b数组
intm=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];
}
}
returntemp;
}
intmain(intargc,constchar*argv[]){
inta[4]={2,3,11,89};
intb[6]={4,6,9,10,22,55};
inta_len=sizeof(a)/sizeof(a[0]);
intb_len=sizeof(b)/sizeof(b[0]);
int*c=sort(a,b,a_len,b_len);
inty=0;
for(;y&lt;a_len+b_len;y++){
printf("%d",c[y]);
}
return0;
}
GO代码:
packagemain
import"fmt"
funcmain(){
vara=[5]int{1,2,3,4,5}
varb=[8]int{4,5,6,7,89,100,111,112}
varlen_a=len(a)
varlen_b=len(b)
varc=make([]int,len_a+len_b)
varj=0//标注a数组
vark=0//标注b数组
varh=0//标注新数组
forj&lt;len_a&amp;&amp;k&lt;len_b{
ifa[j]&gt;b[k]{
c[h]=b[k]
h++
k++
}else{
c[h]=a[j]
h++
j++
}
}
ifj&lt;len_a{
fori:=j;i&lt;len_a;i++{
c[h]=a[i]
h++
}
}
ifk&lt;len_b{
fori:=k;i&lt;len_b;i++{
c[h]=b[i]
h++
}
}
Print(c,"c")
}
/**
*[Printarray]
*@param{[type]}o []int [array]
*@param{[type]}namestring[arrayname]
*/
funcPrint(o[]int,namestring){
fmt.Printf("%s:",name)
for_,v:=rangeo{
fmt.Printf("%d",v)
}
fmt.Printf("\n")
}
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP针对XML文件操作技巧总结》、《PHP错误与异常处理方法总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。