java歸併算法之有序數組合並算法實現

歸併算法之有序數組合並算法實現html

一個簡單的有序數組合並算法:寫一個函數,傳入 2 個有序的整數數組,返回一個有序的整數數組。實現至關簡單,建立一個長度爲這兩個長度之和的數組,而後分別用三個指針指向這三個數組,找到這兩個數組中各個元素在合併數組中的位置並插入,直到某個數組指針到達尾部。再將另外一個數組剩下的全部元素,直接放入歸併數組尾部。算法的簡單實現,須要注意的是對參數的校驗,判斷數組是否有序。 java

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
public class MergeOrderedArray {
  public static int [] merge( int [] a, int []b){
   if (!isOrderedArray(a)){
    System.out.println( " array a is not an ordered array." );
    return null ;
   }
     
   if (!isOrderedArray(b)){
    System.out.println( " array b is not an ordered array." );
    return null ;
   }
    
   int a_len = a.length;
   int b_len = b.length;
   int [] merge = new int [a_len+b_len];
   int i= 0 ,j= 0 ,k= 0 ;
   while (i<a_len&&j<b_len){
    if (a[i]<b[j]){
     merge[k++]=a[i++];
    } else {
     merge[k++]=b[j++];
    }
   }
    
   //A數組所有合併完畢,將b數組剩餘直接加入合併數組
   if (i==a_len){
    for (;j<b_len;j++){
     merge[k++]= b[j];
    }
   } else {
    for (;i<a_len;i++){
     merge[k++]= a[i];
    }
   }
    
   return merge;
    
  }
  
  public static boolean isOrderedArray( int [] array){
   if (array== null ||array.length== 0 ){
    return false ;
   }
    
   for ( int i = 0 ;i<array.length- 1 ;i++){
    if (array[i]>array[i+ 1 ]){
     return false ;
    }
   }
   return true ;
  }
   
  public static void main(String[] args) {
   int a [] = { 1 , 2 , 3 , 4 , 5 };
   int b [] = { 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 };
   int [] merge = merge(a,b);
   System.out.println(Arrays.toString(merge));
  }
}

      算法的時間複雜度,取決於待合併的兩個數組的長度,因此是O(M+N),空間複雜度也是O(M+N),即須要的歸併數組的長度是M+N。算法

 

 

 
Spring Security入門實戰權限控制
2017年版JAVA核心技術(全套) attach_img
傳智播客兩套Hibernate經典開發課程合集 從零開始學習Hibernate視頻教程 attach_img
Java網絡爬蟲程序原理解析 attach_img
Nginx服務器集羣搭建課程 Nginx實戰培訓課程+代碼+資料 Nginx入門到實戰視頻教程 attach_img
Java支付系統微服務架構系統實戰
Spring Boot相關13套視頻教程合輯
基於spring-boot-1.4.x的Spring Boot 教程全集-某果學院價值299元教程 attach_img
C++,java算法與數據結構-某課網價值166元實戰教程 attach_img
Java Spring boot項目實戰微信點餐視頻教程-某課網價值348元實戰教程 attach_img  ...2
億級流量電商詳情頁系統的大型高併發與高可用緩存架構實戰(初版+第二版) attach_img
【自動化測試】Selenium基於Java快速入門視頻教程 13課 attach_img
selenium基於Java測試實戰視頻教程 18課 attach_img
selenium2基於Java與WebDriver視頻教程 8課 attach_img
【自動化測試】selenium2基於Java入門到精通視頻教程 11課 attach_img
Apache Mina網絡通訊架構視頻教程 高可用網絡應用程序開發Mina視頻教程 attach_img
極速入門–Spring MVC、MyBatis、Shiro三大模塊快速入門學習視頻教程 attach_img
北風網ExtJS培訓視頻教程 ExtJS基礎課程+ExtJS項目實戰(兩套)北風網ExtJS在線培訓 attach_img
10個超經典的JAVA項目學習 從功能概述到模塊設計與維護 外加美女講師友情客串 attach_img
李興華老師JAVA實戰培訓視頻教程 JAVA開發實戰李興華60小時視頻講解 JAVA案例講解 attach_img
相關文章
相關標籤/搜索