有序的數組打印或排序對于php來講非常的簡單了這里整理了幾個不同語言的做法的實現代碼,具體的我們一起來看這篇php中有序的數組打印或排序的例子吧.
最近有個面試題挺火的——把倆個有序的數組打印或排序,剛看到這個題的時候也有點蒙,最優的算法肯定要用到有序的特性.
思考了一會發現也不是很難,假如數組是正序排列的,可以同時遍歷倆個數組,將小的值進行排序,最后會遍歷完一個數組,留下一個非空數組,而且剩下的值肯定大于等于已經排好序的最大值.
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);
- } //Vevb.com
- }
- 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);
- ?>
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")
- }
新聞熱點
疑難解答