bhupixb

Merge_sort

Jun 21st, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.15 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 1e5;
  4. int arr[N];
  5. void merge(int *arr , int l , int mid , int r){
  6. int i = 0 , j = l , k = l;
  7. int L[mid - l + 1] , R[r - mid] ;
  8. for( i = l ; i <= mid ; i++){
  9. L[i - l] = arr[i];
  10. }
  11.  
  12. /* ERROR
  13. for ( i = mid+1; i < r; i++) {
  14. R[i - (mid + 1)] = arr[i];
  15. }
  16. */
  17.  
  18. // CORRECTED
  19. for ( i = mid+1; i <= r; i++) {
  20. R[i - (mid + 1)] = arr[i];
  21. }
  22.  
  23. int left = mid -l +1 , right = r - mid;
  24. i = 0 , j = 0 , k = l;
  25. while(i < left && j < right ){
  26. if(L[i] <= R[j]){
  27. arr[k++] = L[i];
  28. i++;
  29. }
  30. else{
  31. arr[k++] = R[j];
  32. j++;
  33. }
  34. }
  35. while(i < left)arr[k++] = L[i] , i++;
  36. while(j < right)arr[k++] = R[j] ,j++;
  37.  
  38. }
  39.  
  40. void merge_sort(int *arr , int l , int r){
  41. if(l >= r)return;
  42. int mid = (l + r) >> 1;
  43. merge_sort(arr , l , mid);
  44. merge_sort(arr , mid+1 ,r);
  45. merge(arr , l , mid , r);
  46. }
  47.  
  48. int main(int argc, char const *argv[])
  49. {
  50. int n;
  51. cin >> n;
  52. for (size_t i = 0; i < n; i++) {
  53. cin >> arr[i];
  54. }
  55. merge_sort(arr , 0 , n-1);
  56. for (size_t i = 0; i < n; i++) {
  57. cout << arr[i] << ' ';
  58. }
  59. return 0;
  60. }
Add Comment
Please, Sign In to add comment