融合排序操作:顺序表a和b升序排序;要求合并成顺序表c,也为升序排列
基本思路: 创建新的顺序表c, 依次比较a和b中的大小,按升序放入c 中。 注意将未比较完的剩余的元素放入c中。
void ComposeOperate(int *seq1, int *seq2, int &len1, int &len2 )
{
//const int len = len1 +len2;
vector <int> ivec;
//for (int count1 = 0; count1 < len1; len1++)
// for (int count2 = 0; count2 < len2; len2++)
int count1 = 0;
int count2 = 0;
while (count1 < len1 && count2 < len2)
{
if (seq1[count1] < seq2[count2])
{
ivec.push_back(seq1[count1]);
count1++;
}
else
{
ivec.push_back(seq2[count2]);
count2 ++;
}
}
if (len1-1 == count1) //b表先扫描完,将a表剩下的元素放入c中
{
for (int i = count2; i < len2; i++)
{
ivec.push_back(seq2[count2]);
}
}
else //a表先扫描完,将b表剩下的元素放入c中
for (int i = count1; i < len1; i++)
{
ivec.push_back(seq1[i]);
}
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout << *iter << " " ;
}
附上整体程序:
#include <iostream>
#include <vector>
using namespace std;
void ComposeOperate(int *seq1, int *seq2, int &len1, int &len2 )
{
//const int len = len1 +len2;
vector <int> ivec;
//for (int count1 = 0; count1 < len1; len1++)
// for (int count2 = 0; count2 < len2; len2++)
int count1 = 0;
int count2 = 0;
while (count1 < len1 && count2 < len2)
{
if (seq1[count1] < seq2[count2])
{
ivec.push_back(seq1[count1]);
count1++;
}
else
{
ivec.push_back(seq2[count2]);
count2 ++;
}
}
if (len1-1 == count1) //b表先扫描完,将a表剩下的元素放入c中
{
for (int i = count2; i < len2; i++)
{
ivec.push_back(seq2[count2]);
}
}
else //a表先扫描完,将b表剩下的元素放入c中
for (int i = count1; i < len1; i++)
{
ivec.push_back(seq1[i]);
}
for (vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); iter++)
cout << *iter << " " ;
}
int main()
{
int len1 = 5;
int len2 = 5;
int seq1[5] = {2, 3, 5, 8, 9};
int seq2[5] = {1, 2, 4, 5, 7};
int *seqa = & seq1[0];
int *seqb = & seq2[0];
ComposeOperate(seqa, seqb, len1, len2);
system ("pause");
return 0;
}