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++法式設計有所贊助。