fork download
  1. // MergeSort
  2. #include <iostream>
  3. using namespace std;
  4.  
  5. void Merge(int *a,int *x,int *y,int s,int e){
  6. int i=s;
  7. int mid = (s+e)/2;
  8. int j=mid+1;
  9. int k=s;
  10. while(i<=mid && j<=e){
  11. if(x[i]<y[j]){
  12. a[k++]=x[i++];
  13. }
  14. else{
  15. a[k++]=y[j++];
  16. }
  17. }
  18. while(i<=mid){
  19. a[k++]=x[i++];
  20. }
  21. while(j<=e){
  22. a[k++]=y[j++];
  23. }
  24. }
  25.  
  26. void MergeSort(int *a,int s,int e){
  27. if(s>=e){
  28. return;
  29. }
  30. // Divide
  31. int x[100],y[100];
  32. int mid = (s+e)/2;
  33. for(int i=s;i<=mid;i++){
  34. x[i]=a[i];
  35. }
  36.  
  37. for(int i=mid+1;i<=e;i++){
  38. y[i]=a[i];
  39. }
  40. // Sort
  41. MergeSort(x,s,mid);
  42. MergeSort(y,mid+1,e);
  43. // Merge
  44. Merge(a,x,y,s,e);
  45. }
  46.  
  47. int main(){
  48. int a[]={6,5,4,3,2,1};
  49. int n=sizeof(a)/sizeof(int);
  50.  
  51. for(int i=0;i<n;i++){
  52. cout<<a[i]<<" ";
  53. }
  54. cout<<endl;
  55. MergeSort(a,0,n-1);
  56. for(int i=0;i<n;i++){
  57. cout<<a[i]<<" ";
  58. }
  59. cout<<endl;
  60.  
  61. return 0;
  62. }
Success #stdin #stdout 0s 4388KB
stdin
Standard input is empty
stdout
6 5 4 3 2 1 
1 2 3 4 5 6