天天看点

算法设计与分析 上机题Mergesort

#include <iostream>

using namespace std;

#define n 100

int g_array[n];     //存放输入的数字

static int count;   //存放元素的个数

// 初始化函数

void initial()

{

    cout << "请输入元素的个数:";

    cin >> count;

    cout << "请输入" << count << "个元素:";

    for(int i = 0; i < count; i ++)

    {

        cin >> g_array[i];

    }

}

//合并函数

void merge(int a[], int l, int m, int r)

    int i = l, j = m+1, k = l;

    int b[n];

    while(i <= m && j <= r)

        if(a[i] <= a[j])

        {

            b[k++] = a[i++];

        }

        else

            b[k++] = a[j++];

    if(i > m)

        for(int p = j; p <= r; p ++)

            b[k++] = a[p];

    else

        for(int p = i; p <= m; p ++)

    //把b[]中排好的元素copy到a[]中

    for(int q = l; q <= r; q ++)

        a[q] = b[q];

//  归并排序 递归算法表示

void bottomupsort(int a[], int left, int right)

    if(left < right)    //数组至少要有两个元素

        int i = (right + left)/2;

        bottomupsort(a, left, i);

        bottomupsort(a, i+1, right);

        merge(a, left, i, right); //把left到right的元素排序好

//打印排好序的数组

void print()

    cout << "经过bottomupsort后:";

        cout << g_array[i] << " ";

    cout << endl;

int main()

    initial();

    if(count > 1)

        bottomupsort(g_array, 0, count-1);

        print();

    else if(count == 1)

    system("pause");

    return 0;

继续阅读