分治法-----归并排序(C语言描述)

来源:互联网 发布:淘宝大学vip课程多少钱 编辑:程序博客网 时间:2024/05/19 14:17

归并排序的基本思想:

将两个及其以上的有序表合并为一张有序表,把待排序序列通过分治法分为若干个有序子序列,然后每两个子序列合并为一个子序列,经过多次合并后整合为一张有序表。


排序过程如图:




代码如下:

#include "stdio.h"#define MAX 100int is1[MAX],is2[MAX];//原数组is1,临时空间数组is2void merge(int low,int mid,int high){    int i=low,j=mid+1,k=low;    while(i<=mid&&j<=high)        if(is1[i]<is1[j])            is2[k++]=is1[i++];        else            is2[k++]=is1[j++];    while(i<=mid)        is2[k++]=is1[i++];    while (j<=high)        is2[k++]=is1[j++];    for ( i = low; i <=high ; i++) {        is1[i]=is2[i];        printf("%5d",is1[i]);    }    printf("\n");}void mergeSort(int a, int b){    if(a<b){        int mid=(a+b)/2;        mergeSort(a,mid);        mergeSort(mid+1,b);        merge(a,mid,b);    }}void main(){    int i,n;    printf("请输入元素个数:");    scanf("%d",&n);    printf("请依次输入每个元素:\n");    for ( i = 1; i <=n ; ++i) {        scanf("%d",&is1[i]);    }    mergeSort(1,n);    printf("排序后的序列为:\n");    for ( i = 1; i <=n ; ++i) {        printf("%4d",is1[i]);    }}


0 0
原创粉丝点击