归并排序
#include<iostream>
using namespace std;
const int N = 1000010;
int n;
int q[N],tem[N];
void Merge_sort(int q[],int left,int right)
{
if(left>= right)
return ;
int mid = (left+right) >>1;
Merge_sort(q,left,mid);
Merge_sort(q,mid+1,right);
int num = 0,i =left,j =mid+1;(2)
while(i <=mid && j <=right )
{
if(q[i]<=q[j])
tem[num++] = q[i++];
else
tem[num++] = q[j++];(1)
}
while(i<=mid) tem[num++] = q[i++];
while(j<=right) tem[num++] = q[j++];
for(int m=left,n=0;m<=right;m++,n++)
q[m] = tem[n];
}
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 ",q[i]);
return 0;
}
Ps:
(1)注意判断条件 相等的时候 i ++
(2)j = mid + 1

(1).注意这里 i 、j 的值,分别是分开后两个数组的头部
本文详细介绍了归并排序的实现过程,包括其核心的分治策略和合并操作。通过示例代码展示了如何从数组的左侧开始,将数组分成两部分进行排序,并将排序后的部分合并。代码中特别强调了在元素相等时如何处理i++的情况,以及在合并过程中j的初始设置为mid+1。最后,代码实现了对输入数组的排序并打印结果。
1600





