2 11 兩個有序鍊錶序列的合併(15)

2021-06-22 20:12:09 字數 1504 閱讀 1598

時間限制

500 ms

記憶體限制

80000 kb

**長度限制

8000 b

判題程式

standard

已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的並集新非降序鍊錶s3。

輸入格式說明:

輸入分2行,分別在每行給出由若干個正整數構成的非降序序列,用-1表示序列的結尾(-1不屬於這個序列)。數字用空格間隔。

輸出格式說明:

在一行中輸出合併後新的非降序鍊錶,數字間用空格分開,結尾不能有多餘空格;若新鍊錶為空,輸出「null」。

樣例輸入與輸出:

序號輸入輸出

1

1 3 5 -1

2 4 6 8 10 -1

1 2 3 4 5 6 8 10

2

1 2 3 4 5 -1

1 2 3 4 5 -1

1 1 2 2 3 3 4 4 5 5

3

-1

-1

null

這種演算法,使用的是插入排序,時間複雜度比較高,是o(n^2),提交後會出現超時的情況

#include#define size 100000

int main()

while(1) //插入排序

if(count==0)

for(i=0;i#define size 20000

int a1[size],a2[size],a3[size*2]; //陣列a1,a2; 陣列3是合併後的陣列

int size1=0,size2=0,size3=0; //陣列a1,a2,a3的實際大小

int main()

while(1)

int j1=0,j2=0;

int size3=0;

//合併演算法, 有點像歸併演算法

while(j1!=size1 && j2!=size2) //a1,a2有乙個陣列到了盡頭, 就終止迴圈

else

size3++;

} for(i=j1;i#include#includeusing namespace std;

vectora1,a2,a3; //向量a1,a2; 向量3是合併後的向量

int main()

while(1)

int j1=0,j2=0;

int size1=a1.size(), size2=a2.size();

//合併演算法, 有點像歸併演算法

while(j1!=size1 && j2!=size2) //a1,a2有乙個陣列到了盡頭, 就終止迴圈

else

}for(i=j1;ifor(i=j2;iint size3=a3.size();

if(size3==0)

for(i=0;i}

合併兩個有序鍊錶序列

本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef ptrtonode list 定義單鏈表型...

兩個有序鍊錶序列的合併

習題2.5 兩個有序鍊錶序列的合併 15分 本題要求實現乙個函式,將兩個鍊錶表示的遞增整數序列合併為乙個非遞減的整數序列。list merge list l1,list l2 其中list結構定義如下 typedef struct node ptrtonode struct node typedef...

兩個有序鍊錶序列的合併

已知兩個非降序鍊錶序列s1與s2,設計函式構造出s1與s2的並集新非降序鍊錶s3。輸入分兩行,分別在每行給出由若干個正整數構成的非降序序列,用 表示序列的結尾 不屬於這個序列 數字用空格間隔。在一行中輸出合併後新的非降序鍊錶,數字間用空格分開,結尾不能有多餘空格 若新鍊錶為空,輸出null。1 3 ...