C/C++归并排序

本文介绍了如何在C语言中使用函数实现顺序列表的输入、打印、合并排序功能,包括EnterElement、PrintList、ComBineList和Marge等关键操作。
摘要由CSDN通过智能技术生成
#include <string>

typedef int ElementType;
typedef struct Squential {
    ElementType *Data;
    int Length;
} Squential;

void EnterElement(Squential &List) {
    int Len;
    int x;
    printf("Please input the Element Length:");
    scanf("%d", &Len);
    fflush(stdin);
    List.Length = Len;
    List.Data = (ElementType *) malloc(sizeof(ElementType) * List.Length);
    for (int i = 0; i < List.Length; ++i) {
        scanf("%d", &x);
        List.Data[i] = x;
    }
}

void PrintList(Squential List) {
    for (int i = 0; i < List.Length; ++i) {
        printf("%4d", List.Data[i]);
    }
    printf("\n");
}
//将已排好序的两个列表进行合并
void ComBineList(Squential List,int Low,int Mid,int High){
    //建立新的辅助循序表,将List.Data中的元素复制其中
    static ElementType *TerminalData;
    TerminalData=(ElementType*) malloc(sizeof (ElementType)*List.Length);
    for (int l = 0; l < List.Length; ++l) {
        TerminalData[l]=List.Data[l];
    }
    //将两个循序表合并
    int i,j,k;
    for (i=Low,j=Mid+1,k=i;i<=Mid && j<=High;++k) {
        //找到第一个循序表中比较小的元素并排序
        if (TerminalData[i]<=TerminalData[j]){
            List.Data[k]=TerminalData[i];
            i++;
        } else{
            List.Data[k]=TerminalData[j];
            j++;
        }

    }
    //给剩余的元素排序
    while (i<=Mid){
        List.Data[k]=TerminalData[i];
        k++;
        i++;
    }
    while (j<=High){
        List.Data[k]=TerminalData[j];
        k++;
        j++;
    }
}
//通过递归,为序列排序并进行合并
void Marge(Squential List,int Low,int High){

    if (Low<High){
        int Mid;
        Mid=(Low+High)/2;
        Marge(List,Low,Mid);
        Marge(List,Mid+1,High);
        ComBineList(List,Low,Mid,High);
    }
}
int main() {
    Squential List;
    EnterElement(List);
    PrintList(List);
    Marge(List,0,9);
    PrintList(List);
    return 0;

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值