zoukankan      html  css  js  c++  java
  • 1065-两路合并

    描述

     

    给定输入排序元素数目n和相应的n个元素,写出程序,利用内排序算法中两路合并排序算法进行排序,并输出排序最后结果的相应序列。

    输入

     

    共两行,第一行给出排序元素数目n,第二行给出n个元素,1n100000,每个元素值范围为 [0100000)

    输出

     

    一行,输出排序结果。

    样例输入

    7

    48 36 68 72 12 48 2

    样例输出

    2 12 36 48 48 68 72

    #include <iostream>
    #define N 100000
    using namespace std;
    void merge(int a[],int i1,int j1,int i2,int j2)
    {
        int *temp=new int[j2-i1+1];
        int i=i1,j=i2,k=0;
        while(i<=j1&&j<=j2)
            if(a[i]<=a[j])
                temp[k++]=a[i++];
            else 
                temp[k++]=a[j++];
        while (i<=j1) temp[k++]=a[i++];
        while (j<=j2) temp[k++]=a[j++];
        for(i=0;i<k;i++)
            a[i1++]=temp[i];
        delete[] temp;
    }
    void mergesort(int a[],int n)
    {
        int i1,j1,i2,j2;
        int size=1;
        while(size<n)
        {
            i1=0;
            while(i1+size<n)
            {
                i2=i1+size;
                j1=i2-1;
                if(i2+size-1>n-1)
                    j2=n-1;
                else
                    j2=i2+size-1;
                merge(a,i1,j1,i2,j2);
                i1=j2+1;
            }
            size*=2;
        }
    }
    int main()
    {
        int n;
        int a[N]={0};
        cin>>n;
        for(int k=0;k<n;k++)
            cin>>a[k];
        mergesort(a,n);
        for(int kk=0;kk<n-1;kk++)
            cout<<a[kk]<<" ";
        cout<<a[n-1]<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    arm单板上移植gdb
    video on web
    chromium源码阅读
    CE-HTML简介
    multi-tap
    DPDK 网卡RSS(receive side scaling)简介
    c语言实现带LRU机制的哈希表
    Linux TCP协议使用的变量
    scp源码浅析
    Linux e1000e网卡驱动
  • 原文地址:https://www.cnblogs.com/Rosanna/p/3436705.html
Copyright © 2011-2022 走看看