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

求两个有序数列的合并——分治算法

时间:2020-02-09 20:15:51      阅读:56      评论:0      收藏:0      [点我收藏+]

标签:排序   简单   自己   lse   构建   http   代码   数组排序   clu   

用分治算法来求一个数组的排序

分治算法:例如:将两个数组a[100]={2,4,5,7,1,2,,3,6}。这个数组排序

先将这个数组分为均两部分得到{2,4,5,7},{1,2,3,6}。

再将{2,4,5,7}分为两部分{2,4},{5,7}。

再分为{2},{4}。

技术图片

 

 这时一个数就不用排序了,直接输出自己。

简单问题,就可以用二分或者三分来算。

上代码:

#include <bits/stdc++.h>
using namespace std;
void hebing(int a[],int b,int mid,int c)
{int* k=new int [1000];
    int i=b,j=mid+1;
    int u=0;
    while(i<=mid&&j<=c)
    {
        if(a[i]<=a[j]) {k[u++]=a[i];i++;}
        else
        {
            k[u++]=a[j];
            j++;
        }
    }
    while(i<=mid){k[u++]=a[i];i++;}
    while(j<=c){k[u++]=a[j];j++;}
    for(int i=b,u=0;i<=c;i++,u++)
    {
        a[i]=k[u];
    } 
    delete[] k;
}                                          // 这个hebing函数的具体代码。
void paixu(int a[],int b,int c)  //b表示起始位置,c表示终止位置。
{
    int mid;
    if(b>=c) return ;
    mid=(b+c)/2;
    paixu(a,b,mid);
    paixu(a,mid+1,c);    //构建两个排好序的数组(从起始到中间,从中间到终止)
    hebing(a,b,mid,c);   //将两个分别排好序的数组,整体排序,合二为一,组成一个我们想要的排好序的数组。
}
int main()
{
    int n;
    int a[1000];
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a[i];
    }
    paixu(a,0,n-1);
    for(int i=0;i<n;i++)
    cout<<a[i]<<" ";
    return 0;

}

 

求两个有序数列的合并——分治算法

标签:排序   简单   自己   lse   构建   http   代码   数组排序   clu   

原文地址:https://www.cnblogs.com/zhuyukun/p/12288352.html

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