归并排序
2 4 3 5 6 1 7 输入七个数
在归并排序中从中间将其分为两段
在排序过程中,有两个指针分别指向两段的开头。判断,如果第一个指针指向的数小于第二个指针指向的数那么这个数就会被存入到新的数组当中,然后该指针移向下一位。
在两个指针移动完毕后。进行归并。
#include <iostream>
using namespace std;
const int N = 1e6+10;
int a[N],tem[N];
void sort(int l,int r){
if(l==r) return;//当数组最小的下标等于最大的下标时,表示该数组就只有一个数,无需排序
int mid = l+r>>1;//找出数组中需要排序的部分的数组中间下标
sort(l,mid);//两次递归排序
sort(mid+1,r);
int k=0,i=l,j=mid+1;
while(i<=mid&&j<=r){
if(a[i]<=a[j]) tem[k++] = a[i++];
else tem[k++] = a[j++];
}
while(i<=mid) tem[k++] = a[i++];
while(j<=r) tem[k++] = a[j++];
for(i=l,j=0;i<=r;i++,j++)
a[i] = tem[j];
}
int main(){
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
cin>>a[i];//为数组赋值
}
sort(0,n-1);//数组中需要排序的部分
for(int i=0;i<n;i++)
{cout<<a[i];
cout<<" ";}
}