php中有序的数组打印或排序的例子

原创
2016-06-08 17:19:48 1082浏览

有序的数组打印或排序对于php来讲非常的简单了这里整理了几个不同语言的做法的实现代码,具体的我们一起来看这篇php中有序的数组打印或排序的例子吧。


最近有个面试题挺火的——把俩个有序的数组打印或排序。刚看到这个题的时候也有点蒙,最优的算法肯定要用到有序的特性。

思考了一会发现也不是很难,假如数组是正序排列的,可以同时遍历俩个数组,将小的值进行排序,最后会遍历完一个数组,留下一个非空数组,而且剩下的值肯定大于等于已经排好序的最大值。

PHP代码之

function sort_arr($a,$b) {
$temp = array();
while ($a&&$b) {
if($a['0'] $temp[] = array_shift($a);
} else {
$temp[] = array_shift($b);
}
}
if(!empty($a)) { $temp = array_merge($temp, $a); }
if(!empty($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);
?>

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 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 <stdio.h>;
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<a_len&&j<b_len) { //重新排序 if(a[i]<b[j]) {
temp[m++] = b[j++];
} else {
temp[m++] = a[i++];
}
}

//将剩余的数字放在新数组后面(剩余的肯定是前面的数字大)
if(i<a_len) {
for (; i<a_len; i++) {
temp[m++] = a[i];
}
}
if(j<b_len) {
for (; j<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<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 < len_a && k < len_b {
if a[j] > b[k] {
c[h] = b[k]
h++
k++
} else {
c[h] = a[j]
h++
j++
}
}

if j < len_a {
for i := j; i < len_a; i++ {
c[h] = a[i]
h++
}
}

if k < len_b {
for i := k; i < 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")
}

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。