PAT 7-12 merge sort

Topic link: click here

Meaning of the question: Given N integers (in the range of long integers), it is required to output the results sorted from small to large. This question aims to test the performance of various sorting algorithms in various data situations.

AC code:

#include<iostream>
#include<cstdio>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

int n;
int q[N], tmp[N];

void merge_sort(int q[], int l, int r)
{
    
    
    if (l >= r) return;			//若区间里只有一个数或者没有数,直接return

    int mid = l + r >> 1;
    merge_sort(q, l, mid);
    merge_sort(q, mid + 1, r);

    int k = 0, i = l, j = mid + 1;		//i是左半边的起点,j是右半边的起点
    while (i <= mid && j <= r)
    {
    
    
	    if (q[i] < q[j]) tmp[k ++ ] = q[i ++ ];
        else tmp[k ++ ] = q[j ++ ];
    }
    
    while (i <= mid) tmp[k ++ ] = q[i ++ ];
    while (j <= r) tmp[k ++ ] = q[j ++ ];

    for (i = l, j = 0; i <= r; i ++, j ++ ) q[i] = tmp[j];
}

int main()
{
    
    
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)  scanf("%d", &q[i]);
    
    merge_sort(q, 0, n - 1);
    
    for(int i = 0; i < n; ++i)  printf("%d%c", q[i], i == n - 1 ? '\n' : ' ');
    
    return 0;
}

Guess you like

Origin blog.csdn.net/qq_42815188/article/details/109304770