Created
February 8, 2017 16:12
-
-
Save Indy9000/e5bc42dc81b85d69d47edbbe9d05a6cc to your computer and use it in GitHub Desktop.
Merge two sorted vectors
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <vector> | |
std::vector<int> merge_vec(const std::vector<int>& v1, const std::vector<int>& v2){ | |
std::vector<int> result; | |
if(v1.size()==0) return v2; | |
if(v2.size()==0) return v1; | |
std::size_t i = 0; //v1 indexer | |
std::size_t j = 0; //v2 indexer | |
while(i<v1.size() && j<v2.size()){ | |
if(v1[i]>=v2[j]){ | |
result.push_back(v2[j++]); //assume ascending | |
}else{ | |
result.push_back(v1[i++]); | |
} | |
} | |
while(i<v1.size()) result.push_back(v1[i++]); | |
while(j<v2.size()) result.push_back(v2[j++]); | |
return result; | |
} | |
void print(const std::vector<int>& v){ | |
for(auto a: v) std::cout << a << ","; | |
std::cout << std::endl; | |
} | |
bool validate(const std::vector<int>& v1,const std::vector<int>& v2){ | |
bool result = true; | |
result = result && (v1.size() == v2.size()); | |
result = result && (v1 == v2); | |
return result; | |
} | |
int main() { | |
auto v1 = merge_vec({3,6,7,9,15}, {1,2,3,4,5,6}); | |
auto v1_ = {1,2,3,3,4,5,6,6,7,9,15}; | |
print(v1); | |
std::cout << (validate(v1,v1_) ? "success":"failed") << std::endl; | |
auto v2 = merge_vec({}, {1,2,3,4,5,6}); | |
auto v2_ = {1,2,3,4,5,6}; | |
print(v2); | |
std::cout << (validate(v2,v2_) ? "success":"failed") << std::endl; | |
auto v3 = merge_vec({1,2,3,4,5,6}, {}); | |
auto v3_ = {1,2,3,4,5,6}; | |
print(v3); | |
std::cout << (validate(v3,v3_) ? "success":"failed") << std::endl; | |
auto v4 = merge_vec({1,1,1,1,1,1}, {2,2,2,2,2}); | |
auto v4_ = {1,1,1,1,1,1,2,2,2,2,2}; | |
print(v4); | |
std::cout << (validate(v4,v4_) ? "success":"failed") << std::endl; | |
auto v5 = merge_vec({}, {}); | |
auto v5_ = std::vector<int>({}); | |
print(v5); | |
std::cout << (validate(v5,v5_) ? "success":"failed") << std::endl; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment