pat每日刷题计划--day72

归并排序模板

mergeSort是归并排序,merge负责将两组数组合并

需要注意的是,在新的数组往a里面赋值的过程中,不一定是从0开始赋值的嗷。因为在归并中两个数组占位连续的,真实的起始位置是l1(因为中途变了,要有一个变量标记)

while里面别忘了l1,l2++

#include
#include<string.h>
#include
using namespace std;
void merge(int a[],int l1,int r1,int l2,int r2)
{
    int temp[1000];
    int num=0;
    int start=l1;
    while(l1<=r1 && l2<=r2)
    {
        if(a[l1]<=a[l2])
            temp[num++]=a[l1++];
        else
            temp[num++]=a[l2++];
    }
    while(l1<=r1)
        temp[num++]=a[l1++];
    while(l2<=r2)
        temp[num++]=a[l2++];
    for(int i=0;i)
        a[start+i]=temp[i];
}
void mergeSort(int a[],int left,int right)
{
    if(left==right) return;
    int mid=(left+right)/2;
    if(left==right) return;
    mergeSort(a,left,mid);
    mergeSort(a,mid+1,right);
    merge(a,left,mid,mid+1,right);
}
int main()
{
    int a[10]={66,12,33,57,64,27,18};
    mergeSort(a,0,6);
    for(int i=0;i<=6;i++)
        printf("%d ",a[i]);
    return 0;
}
View Code

 

你可能感兴趣的:(pat每日刷题计划--day72)