C++合並算法實例。本站提示廣大學習愛好者:(C++合並算法實例)文章只能為提供參考,不一定能成為您想要的結果。以下是C++合並算法實例正文
本文實例講述了C++合並算法。分享給年夜家供年夜家參考。詳細以下:
/*
合並算法:把兩個或兩個以上的線性表歸並在一路,構成一個新的線性表
函數模版的根本應用
法式意圖:將兩個雷同類型的線性表元素排好序,然後將他們組分解一個排好的線性表
*/
#include <iostream>
using namespace std;
const int n = 5; //5個元素
//輸入數據元素
template <class T1>
void OutPut(T1 out[(2*n)])
{
for (int i=0; i<(2*n); i++)
{
cout<<out[i]<<" ";
}
cout<<endl;
}
//輸出數據元素
template <class T2>
void InPut(T2 in[n])
{
cout<<"請輸出5個數據元素:";
for (int i=0; i<n; i++)
{
cin>>in[i];
cout<<" ";
}
cout<<endl;
}
//模版函數 輸出線性表元素並將其排序
template <class T3>
void MySort(T3 a[2*n])
{
int temp; //交流數據暫時變量
//冒泡錨序
for (int i=0; i<2*n-1; i++)
{
for (int j=0; j<2*n-1-i; j++)
{
if (a[j]>a[j+1])
{
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
//模版函數 合並
template <class T>
void MergeList(T La[n], T Lb[n], T Lc[(2*n)])
{
int i = 0; //作為La的下標
int j = 0; //Lb下標
int k = 0; //Lc下標
//將La Lb組分解在一路
while (i<n && j<n)
{
if (La[i] < Lb[j])
{
Lc[k] = La[i];
k++;
Lc[k] = Lb[j];
}
else
{
if (La[i] == Lb[j])
{
Lc[k] = La[i];
k++;
Lc[k] = Lb[j];
}
else
{
Lc[k] = Lb[j];
k++;
Lc[k] = La[i];
}
}
//各下標往下挪動
i++;
j++;
k++;
}
//假如La中的數據沒有取完,及La比Lb長,則將La剩下的元素拔出Lc中 這裡是停止擴大
while (i<=n)
{
Lc[k++] = La[i++];
}
//假如Lb中的數據沒有取完,及Lb比La長,則將Lb剩下的元素拔出Lc中
while (j<=n)
{
Lc[k++] = Lb[j++];
}
//對組合好的元素停止排序
MySort(Lc);
}
int main()
{
int a1[n],a2[n], a[(2*n)];
double b1[n], b2[n],b[(2*n)];
char m1[n], m2[n], m[(2*n)];
//輸出數據 合並輸入
/*InPut(a1);
InPut(a2);
MergeList(a1,a2,a);
OutPut(a); */
InPut(m1);
InPut(m2);
MergeList(m1,m2,m);
OutPut(m);
system("pause");
return 0;
}
願望本文所述對年夜家的C++法式設計有所贊助。