#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int n;
int q[N],tmp[N];
void mergesort(int q[], int l ,int r)
{
if(l >= r) return ;//先判断,没有数的时候就不用排序了
int mid = (l + r) >> 1; //设置mid值
mergesort(q,l, mid); //递归前一部分
mergesort(q, mid +1, r); //递归后一部分
int k = 0;//k表示当前tmp中有多少个数了
int i =l, j = mid + 1;
//下面是把两个有序的序列归到一个有序的序列中去
while (i <= mid && j <= r)
{
if(q[i] <= q[j]) tmp[k++] = q[i++]; //每次把小的放到当前位置上去
else tmp[k++] = q[j++];
}
//下面两个while循环是说,如果左边或右边有位置循环完,就直接接到tmp数组的后面
while(i <= mid) tmp[k++] = q[i++]; //i++是指,先使用,再++
while(j <= r) tmp[k++] = q[j++];
for(i = l, j = 0; i <= r; i++, j++) q[i] = tmp[j];//把临时数组里面的结果重新存到q[n]中去
}
int main()
{
cin >> n;
for(int i = 0; i < n ; i++) cin >> q[i];
mergesort(q,0,n - 1);
for(int i = 0; i < n ; i++) cout << q[i];
return 0;
}
C++: 归并排序
于 2023-06-11 19:34:40 首次发布