数据结构基础7.4:归并排序

来源:互联网 发布:柜子设计软件 编辑:程序博客网 时间:2024/05/14 16:56

一.定义

归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,

每个子序列是有序的,然后再把有序子序列合并为整体有序序列。

二.算法描述(递归实现):

递归过程是将待排序集合一分为二,直至排序集合就剩下一个元素为止,然后不断的合并两个排好序的数组

三.代码实现(递归实现):

#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;/* 将两个有序数组归并到成一个有序数组 */void Merge(int a[], int tmp[], int start, int mid, int end){    int ptmp = start, pleft = start, pright = mid + 1;    int num = end - start + 1;    while(pleft <= mid && pright <= end) {        if(a[pleft] > a[pright])            tmp[ptmp++] = a[pright++];        else            tmp[ptmp++] = a[pleft++];    }    while(pleft <= mid)        tmp[ptmp++] = a[pleft++];    while(pright <= end)        tmp[ptmp++] = a[pright++];    for(int i = start; i <= end; i++)        a[i] = tmp[i];}/* 递归归并 */void MSort(int a[], int tmp[], int start, int end){    if(end > start) {        int mid = start + (end - start) / 2;        MSort(a, tmp, start, mid);        MSort(a, tmp, mid + 1, end);        Merge(a, tmp, start, mid, end);    }}/* 归并排序接口 */void Merge_Sort(int a[], int n){    int tmp[n];    MSort(a, tmp, 0, n - 1);}int main(){    int i;    int a[] = {1, 9, 2, 8, 3, 7, 4 ,6, 5, 0};    for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)         printf("%d ", a[i]);    printf("\n");        Merge_Sort(a, sizeof(a) / sizeof(a[0]));        for(int i = 0; i < sizeof(a) / sizeof(a[0]); i++)         printf("%d ", a[i]);    printf("\n");            system("pause");    return 0;}


0 0
原创粉丝点击