C++实现归并排序

x33g5p2x  于2021-09-24 转载在 C/C++  
字(0.8k)|赞(0)|评价(0)|浏览(465)

  1. #include<iostream>
  2. using namespace std;
  3. void Merge(int arry[], int left, int mid, int right) //合并
  4. {
  5. int *temp = new int[right-left+1]; //中转数组
  6. int p = left;
  7. int q = mid + 1;
  8. int i = 0; //记录temp数组的第一个空位置
  9. while(p<=mid&&q<=right) //对左右两部分按从小到大的顺序合并
  10. {
  11. if(arry[p]<=arry[q])
  12. {
  13. temp[i] = arry[p];
  14. p++;
  15. i++;
  16. }
  17. else
  18. {
  19. temp[i] = arry[q];
  20. q++;
  21. i++;
  22. }
  23. }
  24. while(p<=mid) //若左部分有剩余,全部续到中转数组后
  25. {
  26. temp[i] = arry[p];
  27. p++;
  28. i++;
  29. }
  30. while(q<=right) //若右部分有剩余,全部续到中转数组后
  31. {
  32. temp[i] = arry[q];
  33. q++;
  34. i++;
  35. }
  36. int j = 0;
  37. while(left<=right) //将中转数组中的数据转移到原数组中
  38. {
  39. arry[left] = temp[j];
  40. left++;
  41. j++;
  42. }
  43. }
  44. void MergeSort(int arry[], int left, int right) //归并排序
  45. {
  46. if(left<right)
  47. {
  48. int mid = (left+right)/2;
  49. MergeSort(arry, left, mid);
  50. MergeSort(arry, mid+1, right);
  51. Merge(arry, left, mid, right);
  52. }
  53. }
  54. int main()
  55. {
  56. int a[] = {81,94,11,96,12,35,17,95,28,58,41,75,15};
  57. MergeSort(a,0,13);
  58. for(int i=0; i<13; ++i)
  59. {
  60. cout << a[i] << " ";
  61. }
  62. }

相关文章

最新文章

更多