【編程】把兩個有序數組合併成一個有序數組

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;

int *sortArr(int* stra, int lena, int* strb, int lenb){
	if(stra == nullptr || strb == nullptr)
		return nullptr;//有一個或兩個數組爲空,
	int* strc = new int[lena + lenb + 1];
	int i, j, k;
	i = j = k =0;
	
	while(i < lena && j < lenb){//兩個數組非空,取較小值放進新數組 
		if(stra[i] < strb[j]){
			strc[k++] = stra[i++];
		}
		else{
			strc[k++] = strb[j++];
		}
	}
	while(i < lena){//a數組有剩餘 
		strc[k++] = stra[i++];
	} 
	while(j < lenb){//b數組有剩餘 
		strc[k++] = strb[j++];
	}
	return strc;
}



int main(int argc, char** argv) {
	int arr1[] = {1,4,6,7,9,12,15};
	int arr2[] = {4,7,9,56,78,90};
	int lena = sizeof(arr1) / sizeof(arr1[0]);
	int lenb = sizeof(arr2) / sizeof(arr2[0]);
	int* arr3 = sortArr(arr1, lena, arr2, lenb);
	for(int i = 0; i < (lena + lenb); i++){
		cout<< arr3[i]<<" ";
	}
	cout<<endl;
	delete[] arr3;
	
	//使用vector的sort投機取巧 
	vector<int> arr4;
	for(int i = 0; i < lena;i++){
		arr4.push_back(arr1[i]);
	}
	for(int j = 0; j < lenb; j++){
		arr4.push_back(arr2[j]);
	}
	sort(arr4.begin(),arr4.end());
	for(int k = 0; k< (lena + lenb); k++){
		cout<<arr4[k]<<" ";
	}
	cout<<endl;
	
	return 0;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章