码迷,mamicode.com
首页 > 编程语言 > 详细

归并排序

时间:2019-10-02 22:56:20      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:超出   queue   详解   记录   tac   指针   分治   16px   map   

归并排序详解百度一大把,记录一下代码,是cdq分治的基础。

#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<math.h>
#include<string>
#include<map>
#include<queue>
#include<stack>
#include<set>
#include<ctime>
#define ll long long
#define inf 0x3f3f3f3f
const double pi=3.1415926;
using namespace std;

const int maxx=10086;
int a[maxx];///用来排序的数组
int b[maxx];///原数组
int n;
//归并排序
void merge_sort(int l,int r,int x[])///x数组作为参数,传入
{
    if(l==r)
        return;
    int mid=(l+r)/2;///取中点
    merge_sort(l,mid,x);
    merge_sort(mid+1,r,x);
    int t1=l,t2=mid+1;
    for(int i=l;i<=r;i++)
    {
        if( (x[t1]<x[t2] && t1<=mid) || t2>r ) ///(当前左子区间的值比较小 并且 左指针还没有超出左边的最大值) 或者 右边已经排完了  就取左边
            a[i]=x[t1++];
        else ///不取左就取右 个数则由for循环保证
            a[i]=x[t2++];
    }
    for(int i=l;i<=r;i++)///对b数组也进行交换
        x[i]=a[i];
}


int main()///merge_sort
{
    scanf("%d",&n);
    for(int i=0;i<=n;i++)
        b[i]=rand();
    for(int i=0;i<=n;i++)
        printf("%d\n",b[i]);
    merge_sort(0,n,b);
    for(int i=0;i<=n;i++)
        printf("%d\n",b[i]);
    return 0;
}

 

归并排序

标签:超出   queue   详解   记录   tac   指针   分治   16px   map   

原文地址:https://www.cnblogs.com/shoulinniao/p/11618681.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!