【数据结构】算法10.11-10.14 2-路归并排序
来源:互联网 发布:在线数据库建模 编辑:程序博客网 时间:2024/06/08 13:56
#include<stdio.h>#include<string.h>#include<stdlib.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define EQ(a,b) ((a) == (b))#define LT(a,b) ((a) < (b))#define LQ(a,b) ((a) <= (b))typedef int Status;typedef int ElemType;#define MAXSIZE 20typedef int KeyType;typedef char InfoType;typedef struct{ KeyType key; InfoType otherinfo;}RcdType;typedef struct{ RcdType r[MAXSIZE+1]; //0号单元置空或用作哨兵 int length;}SqList;/*******************************声明部分****************************************/Status CreateSqList(SqList *L);//创建顺序表Status TraverseSqList(SqList L);//打印顺序表/*******************************函数部分****************************************/Status CreateSqList(SqList *L){ /* int i; printf("请输入长度:"); scanf("%d",&L->length); for(i = 1;i <= L->length;i++){ printf("请输入关键值:"); scanf("%d",&L->r[i].key); }*/ L->r[1].key = 49; L->r[2].key = 38; L->r[3].key = 65; L->r[4].key = 97; L->r[5].key = 76; L->r[6].key = 13; L->r[7].key = 27; L->length = 7; return OK;}Status TraverseSqList(SqList L){ int i; for(i = 1;i<=L.length;i++) printf("%d ",L.r[i].key); printf("\n"); return OK;}void Merge(RcdType SR[],RcdType TR[],int i,int m,int n){ int j,k; for(j = m+1, k = i; i<=m && j <= n; ++k){ if(LQ(SR[i].key,SR[j].key)) TR[k] = SR[i++]; else TR[k] = SR[j++]; } if(i <= m){ int ct1,ct2; for(ct1 = k,ct2 = i;ct1<=n,ct2<=m;++ct1,++ct2) TR[ct1] = SR[ct2]; } if(j <= n){ int ct1,ct2; for(ct1 = k,ct2 = j;ct1<=n,ct2<=n;++ct1,++ct2) TR[ct1] = SR[ct2]; }}void MSort(RcdType SR[],RcdType TR1[],int s,int t){ RcdType TR2 [MAXSIZE+1]; if(s==t) TR1[s] = SR[s]; else{ int m = (s+t)/2; MSort(SR,TR2,s,m); MSort(SR,TR2,m+1,t); Merge(TR2,TR1,s,m,t); }}void MergeSort(SqList *L){ MSort(L->r,L->r,1,L->length);}/*******************************主函数部分**************************************/int main(){ SqList L; printf("创建顺序表:\n"); CreateSqList(&L); TraverseSqList(L); printf("2-路归并排序:\n"); MergeSort(&L); TraverseSqList(L); return 0;}
0 0
- 【数据结构】算法10.11-10.14 2-路归并排序
- 数据结构-排序: 两路归并排序算法
- 数据结构-排序: 两路归并排序算法
- [数据结构] 归并排序算法
- 【数据结构与算法】二路归并排序
- 算法与数据结构(三)--归并排序(2路归并排序)
- [数据结构与算法]归并排序
- 数据结构与算法-归并排序
- 数据结构与算法-----归并排序
- 【数据结构与算法】归并排序
- 【数据结构与算法】归并排序
- 2-路归并排序算法
- 2路归并排序算法
- 数据结构(C#)_排序算法(归并排序)
- 图解"数据结构--内部排序算法"----归并排序
- 数据结构算法】--【排序】:归并排序实现源码
- 【数据结构与算法之排序】归并排序
- 数据结构——2路归并排序
- 编程思想:面向对象和面向过程
- 最小生成树(普利姆算法、克鲁斯卡尔算法)
- char varchar nchar nvarchar区别
- ionic开发
- Android——View的绘制
- 【数据结构】算法10.11-10.14 2-路归并排序
- 邮件发送
- java静态变量声明和初始化
- 十月读书笔记:Effective Java(二)--注意栈内过期的对象引用
- Java并发编程:volatile关键字解析
- Java 多线程详解(一)
- java中的缓存技术该如何实现
- 从0开始学习 GitHub 系列之「04.向GitHub 提交代码」
- swift3.0 使用coredata