a亚洲精品_精品国产91乱码一区二区三区_亚洲精品在线免费观看视频_欧美日韩亚洲国产综合_久久久久久久久久久成人_在线区

首頁 > 編程 > C > 正文

C語言實現在數組A上有序合并數組B的方法

2020-01-26 15:18:13
字體:
來源:轉載
供稿:網友

本文實例講述了C語言實現在數組A上有序合并數組B的方法,分享給大家供大家參考。具體分析如下:

題目:數組A和數組B均有序,數組A有足夠大內存來容納數組B,將數組B有序合并到數組A中

分析:如果由前至后合并,復雜度將會是O(N2),這樣的復雜度顯然不是最優解,利用兩個指針指向兩個數組的尾部,從后往前遍歷,這樣的復雜度為O(n2)

由此可以寫出下面的代碼:

#include <iostream>#include <algorithm>#include <iterator>using namespace std;int arrayA[10] = {1, 3, 5, 7, 9};int arrayB[] = {2, 4, 6, 8, 10};const int sizeB = sizeof arrayB / sizeof *arrayB;const int sizeA = sizeof arrayA / sizeof *arrayA - sizeB;int* mergeArray(int *arrayA, int sizeA, int *arrayB, int sizeB){ if (arrayA == NULL || arrayB == NULL || sizeA < 0 || sizeB < 0) return NULL; int posA = sizeA - 1; int posB = sizeB - 1; while (posA >= 0 && posB >= 0) { if (arrayA[posA] < arrayB[posB]) {  arrayA[posA + posB + 1] = arrayB[posB];  posB--; } else {  arrayA[posA + posB + 1] = arrayA[posA];  posA--; } copy(arrayA, arrayA + 10, ostream_iterator<int>(cout, " ")); system("pause"); } return arrayA;}void main(){ int *result = mergeArray(arrayA, sizeA, arrayB, sizeB); copy(result, result + 10, ostream_iterator<int>(cout, " ")); cout << endl;}

代碼寫完后似乎完成了所需功能,但還不止于此,必須對上述代碼做UT

1. 健壯性

arrayA或arrayB為空,長度小于0

2. 邊界用例

arrayA為空,長度為1;arrayB不為空,長度大于1
首元素用例
const int size = 6;
int arrayA[size] = {2};
int arrayB[] = {0, 1, 1, 1, 1};
反之
const int size = 6;
int arrayA[size] = {0, 1, 1, 1, 1};
int arrayB[] = {2};

3. 正常用例:

const int size = 10;
int arrayA[size] = {1, 3, 5, 7, 9};
int arrayB[] = {2, 4, 6, 8, 10};

const int size = 10;
int arrayA[size] = {2, 4, 6, 8, 10};
int arrayB[] = {1, 3, 5, 7, 9};

const int size = 10;
int arrayA[size] = {1, 2, 3, 4, 5};
int arrayB[] = {6, 7, 8, 9, 10};

const int size = 10;
int arrayA[size] = {6, 7, 8, 9, 10};
int arrayB[] = {1, 2, 3, 4, 5};

經過上面的測試,不難發現在邊界條件用例中,代碼已經不能正確運行出結果,在測試用例的驅動下,不難寫出正確代碼如下:

int* mergeArray(int *arrayA, int sizeA, int *arrayB, int sizeB){ if (arrayA == NULL || arrayB == NULL || sizeA < 0 || sizeB < 0) return NULL; int posA = sizeA - 1; int posB = sizeB - 1; while (posA >= 0 && posB >= 0) { if (arrayA[posA] < arrayB[posB]) {  arrayA[posA + posB + 1] = arrayB[posB];  posB--; } else {  arrayA[posA + posB + 1] = arrayA[posA];  posA--; } copy(arrayA, arrayA + size, ostream_iterator<int>(cout, " ")); system("pause"); } //出現兩種情形: //1. posA < 0 && posB >= 0 //2. posA >= 0 && posB < 0 //只有第1種情形需要進行處理 if (posA < 0 && posB >= 0) { while (posB >= 0) {  arrayA[posA + posB + 1] = arrayB[posB];  posB--; } }  return arrayA;}

相信本文所述對大家C程序算法設計的學習有一定的借鑒價值。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 久久久久国产精品一区二区 | 国产第99页 | av国产精品毛片一区二区小说 | 精品在线免费播放 | 国产精品亚洲视频 | 成人日韩| 逼逼av | 国产另类一区 | 久久99国产精一区二区三区 | 99中文字幕 | 91porn在线 | 国产精品久久久久影院色老大 | 欧美 日韩 国产 一区 | 国产精品一区二区三区在线免费观看 | 欧美一区二区三区免费 | 中文字幕在线永久 | 自拍在线 | 日本在线免费播放 | 久久一区二区视频 | 日日射av | 亚洲欧美一区二区三区久久 | 久久青青视频 | 黄色免费av网站 | 国产99久久精品 | 日本久久99 | 91电影院 | 凹凸日日摸日日碰夜夜爽孕妇 | 亚洲一级性生活片 | 欧洲一级黄 | 免费黄色在线 | 高清xxxx | 欧美精品在欧美一区二区少妇 | 国产精品成人免费视频 | 海外中文字幕在线观看 | 亚洲国产婷婷香蕉久久久久久99 | 91麻豆精品国产91久久久久久 | 精品国产91亚洲一区二区三区www | 日本三级黄色录像 | 国产综合精品一区二区三区 | 韩国女主播bj精品久久 | 黄色av免费 |