Guest User

Untitled

a guest
Dec 17th, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.60 KB | None | 0 0
  1. #include "pch.h"
  2. #include <iostream>
  3. #include <vector>
  4. using namespace std;
  5.  
  6. void merge(int* A, int left, int mid, int right)
  7. {
  8. vector<int> B(right - left+1);
  9. int j = mid + 1;
  10. int k = 0;
  11. int i = left;
  12. while (i <= mid&&j <= right)
  13. {
  14. if (A[i] > A[j])
  15. {
  16. B[k++] = A[j];
  17. j++;
  18. }
  19. else
  20. {
  21. B[k++] = A[i++];
  22. }
  23. }
  24. while(j <= right) //前面部分元素排列完毕,后面的就不用动了
  25. {
  26. B[k++] = A[j++];
  27. }
  28. while (i <= mid) //后面的排完了,把前面的放到最后
  29. {
  30. B[k++] = A[i++];
  31. }
  32. /*for (int i = 0; i < right - left + 1; i++)
  33. {
  34. cout << B[i] << " ";
  35. }
  36. cout << endl;*/
  37. //这里之所以一直报错是因为left是动态的,那么for的判断条件也是动态了,所以就出错了
  38. //解决方法有二,一是用一个m来接受left然后做A的下标,二就是left+i
  39. /*int m = left;
  40. for (int i = 0; i < right-left+1; i++)
  41. {
  42. A[left++] = B[i];
  43. }*/
  44. for (int i = 0; i < right - left + 1; i++)
  45. {
  46. A[left+i] = B[i];
  47. }
  48. }
  49.  
  50. void sort(int *A, int left, int right) //这个函数是用来把一个数组层层扒开,然后变成一个一个的
  51. {
  52. if(left < right)
  53. {
  54. int mid = (left+right)/2;
  55. sort(A, left, mid);
  56. sort(A, mid + 1, right);
  57. merge(A, left, mid, right);
  58. }
  59. }
  60.  
  61. void mergeSort(int* A, int n)
  62. {
  63. // write code here
  64. sort(A, 0, n - 1);
  65. }
  66.  
  67. int main()
  68. {
  69. int *arr = new int[13];
  70. arr[0] = 54;
  71. arr[1] = 35;
  72. arr[2] = 48;
  73. arr[3] = 36;
  74. arr[4] = 27;
  75. arr[5] = 12;
  76. arr[6] = 44;
  77. arr[7] = 44;
  78. arr[8] = 8;
  79. arr[9] = 14;
  80. arr[10] = 26;
  81. arr[11] = 17;
  82. arr[12] = 28;
  83. mergeSort(arr,13);
  84. for (int i = 0; i < 13; i++)
  85. cout << arr[i]<<" ";
  86. delete[]arr;
  87. return 0;
  88. }
Add Comment
Please, Sign In to add comment