国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++歸并算法實例

2020-05-23 14:18:20
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了C++歸并算法,實例分析了C++實現基于歸并算法合并線性表的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下

本文實例講述了C++歸并算法。分享給大家供大家參考。具體如下:

 

 
  1. /*  
  2. 歸并算法:把兩個或兩個以上的線性表合并在一起,形成一個新的線性表 
  3. 函數模版的基本使用 
  4. 程序意圖:將兩個相同類型的線性表元素排好序,然后將他們組合成一個排好的線性表  
  5. */ 
  6. #include <iostream> 
  7. using namespace std; 
  8. const int n = 5; //5個元素  
  9. //輸出數據元素 
  10. template <class T1> 
  11. void OutPut(T1 out[(2*n)]) 
  12. {  
  13. for (int i=0; i<(2*n); i++) 
  14. {  
  15. cout<<out[i]<<" "
  16. cout<<endl; 
  17. }  
  18. //輸入數據元素  
  19. template <class T2> 
  20. void InPut(T2 in[n]) 
  21. cout<<"請輸入5個數據元素:"
  22. for (int i=0; i<n; i++) 
  23. {  
  24. cin>>in[i]; 
  25. cout<<" ";  
  26. cout<<endl; 
  27. //模版函數 輸入線性表元素并將其排序 
  28. template <class T3>  
  29. void MySort(T3 a[2*n]) 
  30. int temp; //交換數據臨時變量  
  31. //冒泡錨序  
  32. for (int i=0; i<2*n-1; i++) 
  33. for (int j=0; j<2*n-1-i; j++) 
  34. if (a[j]>a[j+1])  
  35. temp = a[j]; 
  36. a[j] = a[j+1]; 
  37. a[j+1] = temp;  
  38. //模版函數 歸并  
  39. template <class T>  
  40. void MergeList(T La[n], T Lb[n], T Lc[(2*n)])  
  41. int i = 0; //作為La的下標  
  42. int j = 0; //Lb下標 
  43. int k = 0; //Lc下標  
  44. //將La Lb組合成在一起  
  45. while (i<n && j<n) 
  46. if (La[i] < Lb[j]) 
  47. Lc[k] = La[i]; 
  48. k++; 
  49. Lc[k] = Lb[j]; 
  50. else 
  51. if (La[i] == Lb[j]) 
  52. Lc[k] = La[i]; 
  53. k++; 
  54. Lc[k] = Lb[j]; 
  55. else 
  56. Lc[k] = Lb[j]; 
  57. k++; 
  58. Lc[k] = La[i]; 
  59. //各下標往下移動  
  60. i++; 
  61. j++; 
  62. k++; 
  63. }  
  64. //如果La中的數據沒有取完,及La比Lb長,則將La剩下的元素插入Lc中 這里是進行擴展  
  65. while (i<=n) 
  66. Lc[k++] = La[i++]; 
  67. }  
  68. //如果Lb中的數據沒有取完,及Lb比La長,則將Lb剩下的元素插入Lc中 
  69. while (j<=n) 
  70. Lc[k++] = Lb[j++]; 
  71. }  
  72. //對組合好的元素進行排序  
  73. MySort(Lc);  
  74. int main() 
  75. int a1[n],a2[n], a[(2*n)]; 
  76. double b1[n], b2[n],b[(2*n)]; 
  77. char m1[n], m2[n], m[(2*n)]; 
  78. //輸入數據 歸并輸出  
  79. /*InPut(a1); 
  80. InPut(a2);  
  81. MergeList(a1,a2,a); 
  82. OutPut(a); */ 
  83. InPut(m1); 
  84. InPut(m2);  
  85. MergeList(m1,m2,m); 
  86. OutPut(m);  
  87. system("pause"); 
  88. return 0; 
  89. }  

希望本文所述對大家的C++程序設計有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 贵阳市| 金溪县| 海林市| 文成县| 德清县| 略阳县| 五大连池市| 涡阳县| 前郭尔| 灵丘县| 合山市| 改则县| 吴忠市| 府谷县| 姚安县| 馆陶县| 巴马| 吴江市| 毕节市| 桦甸市| 理塘县| 三亚市| 乐都县| 余姚市| 嘉鱼县| 康保县| 政和县| 高州市| 宜春市| 苍溪县| 阳曲县| 山西省| 固镇县| 绍兴县| 灵丘县| 广东省| 娄底市| 江津市| 获嘉县| 烟台市| 元谋县|