Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 1e5;
- int arr[N];
- void merge(int *arr , int l , int mid , int r){
- int i = 0 , j = l , k = l;
- int L[mid - l + 1] , R[r - mid] ;
- for( i = l ; i <= mid ; i++){
- L[i - l] = arr[i];
- }
- /* ERROR
- for ( i = mid+1; i < r; i++) {
- R[i - (mid + 1)] = arr[i];
- }
- */
- // CORRECTED
- for ( i = mid+1; i <= r; i++) {
- R[i - (mid + 1)] = arr[i];
- }
- int left = mid -l +1 , right = r - mid;
- i = 0 , j = 0 , k = l;
- while(i < left && j < right ){
- if(L[i] <= R[j]){
- arr[k++] = L[i];
- i++;
- }
- else{
- arr[k++] = R[j];
- j++;
- }
- }
- while(i < left)arr[k++] = L[i] , i++;
- while(j < right)arr[k++] = R[j] ,j++;
- }
- void merge_sort(int *arr , int l , int r){
- if(l >= r)return;
- int mid = (l + r) >> 1;
- merge_sort(arr , l , mid);
- merge_sort(arr , mid+1 ,r);
- merge(arr , l , mid , r);
- }
- int main(int argc, char const *argv[])
- {
- int n;
- cin >> n;
- for (size_t i = 0; i < n; i++) {
- cin >> arr[i];
- }
- merge_sort(arr , 0 , n-1);
- for (size_t i = 0; i < n; i++) {
- cout << arr[i] << ' ';
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment