日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

oj 合并有序序列

發布時間:2024/9/21 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 oj 合并有序序列 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?合并有序序列

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? Time Limit: 1000/1000MS (C++/Others)?Memory Limit: 65536/65536KB (C++/Others)

Problem Description

有兩個已排序好的序列A(長度為n1),B(長度為n2),將它們合并為一個有序的序列C(長度為n=n1+n2)。0 < n1,n2 < 1000。

Input

輸入有多組測試數據,每組占兩行,第一行為A序列(均為正整數),最后為-1,表示結束。第二行為B序列(均為正整數),最后為-1,表示結束。

Output

輸出合并后的序列C,每組占一行。

Sample Input

1 3 8 9 11 -1 2 5 7 10 13 -1

Sample Output

1 2 3 5 7 8 9 10 11 13

解法:

思路1:使用歸并排序的思想,將兩個有序數組合并成一個有序數組,時間復雜度o(n),空間復雜度o(n)

思路2:插入排序,將其中一個數組作為基準,然后遍歷該基準數組,將另一個數組的每個元素插入到基準數組的正確位置。最后的到一個有序數組;時間復雜度o(n2),空間復雜度o(1)

我這里采用的思路1,歸并排序的思想。

C語言源碼:

#include<stdio.h> #define max 1001 int c[3002]; int* merge(int a[],int t,int b[],int v){ //歸并排序int i=0,j=0,k=0;while(i<t&&j<v){if(a[i]<b[j]){c[k++]=a[i];i++;}else{c[k++]=b[j];j++;}}while(i<t){c[k++]=a[i];i++;}while(j<v){c[k++]=b[j];j++;}return c; }int main(){int a[max];int b[max];int *c;int temp,temp1,i=0,j=0,m,n;while(scanf("%d",&temp)!=EOF){ //多組輸入while(temp!=-1){a[i++]=temp;scanf("%d",&temp);m=i;}temp1=temp; //去掉-1scanf("%d",&temp); while(temp!=-1){b[j++]=temp;scanf("%d",&temp);n=j;}temp1=temp;c=merge(a,m,b,n);for(int k=0;k<m+n;k++){printf("%d",c[k]);if(k<m+n-1)printf(" ");}printf("\n");i=0;j=0;}return 0;}

?

總結

以上是生活随笔為你收集整理的oj 合并有序序列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。