BottomupSort算法 c++代码实现

#include <iostream>
using namespace std;

#define N 100

int A[N];     
static int n;   


void Initial()
{
    cout << "请输入元素的个数:";
    cin >> n;
    cout << "请输入" << n << "个元素:";
    for(int i = 1; i <=n; i ++)
    {
        cin >> A[i];
    }
}

void Print()
{
    cout << "经过Bottomupsort后:";
    for(int i = 1; i <=n; i ++)
    {
        cout << A[i] << " ";
    }
    cout << endl;
}


void Merge(int a[], int p, int q, int r)
{
    int b[N];
    int s = p, t = q+1, k = p;
    
    while(s <= q && t <= r)
    {
        if(a[s] <= a[t])
        {
            b[k++] = a[s++];
        }
        else
        {
            b[k++] = a[t++];
        }
    }

    if(s==q+1)
    {
        for(int i = t; i <= r; i ++)
        {
            b[k++] = a[i];
        }
    }
    else
    {
        for(int j = s; j <= q; j ++)
        {
            b[k++] = a[j];
        }
    }

    //把b[]中排好的元素copy到a[]中
    for(int i = p; i <= r; i++)
    {
        a[i] = b[i];
    }
}


void Bottomupsort(int a[],int n)
{

   int t = 1;
   int s,i;
   while (t<n)
   {
        s = t;t =2*s;i=0;
        while(i+t<=n)
        {
            Merge(a,i+1,i+s,i+t);
            i = i+t;
        }
        if(i+s<n)
        {
            Merge(a,i+1,i+s,n);
        }
   }
}


int main()
{
    Initial();

    if(n > 1)
    {
        Bottomupsort(A,n);
        Print();
    }
    else if(n == 1)
    {
        Print();
    }
    system("pause");
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值