資料結構:遞增排列的陣列 union all 演算法 2.1

gaopengtttt發表於2016-09-13
遞增排列的陣列 union all
假設有2個線性表,遞增排列的陣列,如
char a[20]="abbcopqtuwz";
char b[20]="bcfgjmtv";
我們需要實現一個union all,將兩個字串中的字元合併到

一個新的線性表c中,其中也是按照遞增排列的。
那麼按照我們要求輸出應該為
abbbccfgjmopqttuvwz


那麼演算法如下:

點選(此處)摺疊或開啟

  1. #include<stdio.h>
  2. #include <string.h>


  3. int main(void)
  4. {
  5.         char a[20]="abbcopqtuwz";
  6.         char b[20]="bcfgjmtv";

  7.         char c[30];
  8.         memset(c,0,30);

  9.         int n=0;
  10.         int m=0;
  11.         int h=0;

  12.         int a_len=strlen(a);
  13.         int b_len=strlen(b);

  14.         while(n<a_len && m<b_len)
  15.         {
  16.                 if(a[n]< b[m])
  17.                 {
  18.                         c[h]=a[n];
  19.                         n++;
  20.                 }
  21.                 else if(a[n]==b[m])
  22.                 {
  23.                         c[h]=a[n];
  24.                         n++;
  25.                 }
  26.                 else
  27.                 {
  28.                         c[h]=b[m];
  29.                         m++;
  30.                 }
  31.                 h++;
  32.         }

  33.         if(a[n] != 0)
  34.         {
  35.                 while(n<a_len)
  36.                 {
  37.                         c[h]=a[n];
  38.                         n++;
  39.                         h++;
  40.                 }
  41.         }

  42.         if(b[m] != 0 )
  43.         {
  44.                 while(m<b_len)
  45.                 {
  46.                         c[h]=b[m];
  47.                         m++;
  48.                         h++;
  49.                 }
  50.         }

  51.   
  52.         printf("%s\n",c);
  53. }



執行程式輸出為:abbbccfgjmopqttuvwz
可以看到和預期一模一樣。
分析這個演算法的漸進時間複雜度,實際上我們發現他只是一個單迴圈,很明顯我們原操作只是c[h]=a[n];這樣的複製
所以時間複雜度為:
T(n)=O(n)
但是這樣的演算法明顯依賴於兩個陣列排序好了的情況

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/7728585/viewspace-2124893/,如需轉載,請註明出處,否則將追究法律責任。

相關文章