归并排序算法
来源:互联网 发布:上海数据交易中心工资 编辑:程序博客网 时间:2024/06/05 19:21
#include<stdio.h>
void MERGEsort(int *a,int start,int mid,int end){
if(end-start>1){
MERGEsort(a,start,(start+mid)/2,mid); // 左边二分
MERGEsort(a,mid,(end+mid)/2,end); // 右边二分
}
int i=start,j=mid,st[1000],c=0; // 数据
while(i<mid&&j<end){ // 合并两个有序队列
st[c++]=a[i]<a[j]?a[i++]:a[j++];
}
while(i<mid){ // 左边有剩余清空左队列数据
st[c++]=a[i++];
}
while(j<end){ // 右边有剩余数据清空右队列数据
st[c++]=a[j++];
}
for(i=0;i<c;i++){ // 将数据重新整合到原数组中
a[i+start]=st[i];
}
}
int main()
{
int i,st[]={9,8,7,6,5,4,3,2,1,0};
MERGEsort(st,0,sizeof(st)/4/2,sizeof(st)/4);
for(i=0;i<sizeof(st)/4;i++)
printf("%d ",st[i]);
return 0;
}
void MERGEsort(int *a,int start,int mid,int end){
if(end-start>1){
MERGEsort(a,start,(start+mid)/2,mid); // 左边二分
MERGEsort(a,mid,(end+mid)/2,end); // 右边二分
}
int i=start,j=mid,st[1000],c=0; // 数据
while(i<mid&&j<end){ // 合并两个有序队列
st[c++]=a[i]<a[j]?a[i++]:a[j++];
}
while(i<mid){ // 左边有剩余清空左队列数据
st[c++]=a[i++];
}
while(j<end){ // 右边有剩余数据清空右队列数据
st[c++]=a[j++];
}
for(i=0;i<c;i++){ // 将数据重新整合到原数组中
a[i+start]=st[i];
}
}
int main()
{
int i,st[]={9,8,7,6,5,4,3,2,1,0};
MERGEsort(st,0,sizeof(st)/4/2,sizeof(st)/4);
for(i=0;i<sizeof(st)/4;i++)
printf("%d ",st[i]);
return 0;
}
阅读全文
0 0
- 排序算法-归并排序
- 排序算法------归并排序
- 排序算法-归并排序
- 排序算法---归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 排序算法-归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- 排序算法--归并排序
- 排序算法-归并排序
- 排序算法--归并排序
- 排序算法:归并排序
- 【排序算法】归并排序
- VC CFineFinder遍历文件夹下的所有文件
- 第一个只出现一次的字符+数组中重复的数字
- css3 flex属性flex-grow、flex-shrink、flex-basis学习笔记
- 字符串拷贝函数memcpy和strncpy以及snprintf 的性能比较
- hdoj 5952 Counting Cliques
- 归并排序算法
- js获取当前时间为整点,没有时分秒
- springboot-mybatis 配置详解
- 8.21 问题 D: 最短路径问题问题 D: 最短路径问题
- SQL语言概述
- 配置nginx实现跨域
- 8月21日总结
- 应届生面试问题
- 关于tinker 热修复的多渠道打包方式