fork download
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. void Merge(vector<int>&nums,int left,int mid,int right)
  4. {
  5. vector<int>leftpart,rightpart;
  6. for(int i=left;i<=right;i++)
  7. {
  8. if(i<=mid)
  9. {
  10. leftpart.push_back(nums[i]);
  11. }
  12. else
  13. {
  14. rightpart.push_back(nums[i]);
  15. }
  16. }
  17. int leftidx=0,rightidx=0,numsidx=left;
  18. while(1)
  19. {
  20. if(leftpart[leftidx]<rightpart[rightidx])
  21. {
  22. nums[numsidx]=leftpart[leftidx];
  23. numsidx++;
  24. leftidx++;
  25. }
  26. else
  27. {
  28. nums[numsidx]=rightpart[rightidx];
  29. numsidx++;
  30. rightidx++;
  31. }
  32. if(leftidx>=leftpart.size() || rightidx>=rightpart.size())
  33. break;
  34. }
  35. while(leftidx<leftpart.size())
  36. {
  37. numsidx=leftpart[leftidx];
  38. numsidx++;
  39. leftidx++;
  40. }
  41. while(rightidx<rightpart.size())
  42. {
  43. numsidx=rightpart[rightidx];
  44. numsidx++;
  45. rightidx++;
  46. }
  47. }
  48. void MergeSort(vector<int>&nums,int left,int right)
  49. {
  50. if(left==right)
  51. {
  52. return;
  53. }
  54. int mid=(right+left)/2;
  55. MergeSort(nums,left,mid);
  56. MergeSort(nums,mid+1,right);
  57. Merge(nums,left,mid,right);
  58. }
  59. int main()
  60. {
  61. int n;
  62. cin>>n;
  63. vector<int>nums;
  64. for(int i=0;i<n;i++)
  65. {
  66. int x;
  67. cin>>x;
  68. nums.push_back(x);
  69. }
  70. MergeSort(nums,0,n-1);
  71. for(int i=0;i<n;i++)
  72. {
  73. cout<<nums[i]<<" ";
  74. }
  75. }
Success #stdin #stdout 0.01s 5288KB
stdin
5
9 3 0 5 1
stdout
0 1 1 1 1