归并排序
来源:互联网 发布:大数据服务公司 编辑:程序博客网 时间:2024/05/29 15:42
本程序在VC环境下运行。
mergesort.h文件
#include<stdio.h>
#include<stdlib.h>
typedef int keyType;
typedef int otherType;
typedef struct{
keyType key;
otherType other_data;
}Record;
mergesort.cpp文件
#include "mergesort.h"
//归并两个有序的序列
void merge(Record r1[],int low,int mid,int high,Record r2[]){
int i,j,k;
i=low;
j=mid+1;
k=low;
while(i<=mid && j<=high){
if(r1[i].key<=r1[j].key){
r2[k]=r1[i];
i++;
}else{
r2[k]=r1[j];
j++;
}
k++;
}
while(i<=mid){
r2[k]=r1[i];
k++;
i++;
}
while(j<=high){
r2[k]=r1[j];
k++;
j++;
}
}
//递归进行归并
void msort(Record r1[],int low,int high,Record r3[]){
int mid;
Record r2[20];//作为辅佐空间
if(low==high){
r3[low]=r1[low];
}else{
mid=(low+high)/2;
msort(r1,low,mid,r2);
msort(r1,mid+1,high,r2);
merge(r2,low,mid,high,r3);
}
}
void Msort(Record r[],int n){//对数组r进行归并排序
msort(r,1,n,r);
}
void main(){
int i,j;
Record record[20];
int length;
printf("请输入待排序记录的长度:");
scanf("%d",&length);
for(i=1;i<=length;i++){
printf("请输入第%d个记录的值:",i);
scanf("%d",&j);
record[i].key=j;
}
for(i=1;i<=length;i++){
printf("%d\t",record[i].key);
}
printf("\n");
Msort(record,length);
for(i=1;i<=length;i++){
printf("%d\t",record[i].key);
}
printf("\n");
}
运行结果如下:
请输入待排序记录的长度:8
请输入第1个记录的值:19
请输入第2个记录的值:13
请输入第3个记录的值:5
请输入第4个记录的值:27
请输入第5个记录的值:1
请输入第6个记录的值:26
请输入第7个记录的值:31
请输入第8个记录的值:16
19 13 5 27 1 26 31 16
1 5 13 16 19 26 27 31
Press any key to continue
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- iOS 7 教程:定制iOS 7中的导航栏和状态栏
- 树状菜单代码
- java 初始化和构造函数
- Android OTA 升级
- HDU 1688 Sightseeing 求最短路和次短路条数之和
- 归并排序
- 左侧树状菜单代码
- oracle菜鸟到大神之路
- 【debug】三星手机com.google.progress.gapps已停止运行
- Vyatta logo企业级的路由器/防火墙 Vyatta
- 单例 从plist文件中读取数据
- 写代码的心得
- Linux内核跟踪之trace框架分析
- libpng读取图片并上传到纹理