首页 > 编程 > 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++程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表