常用排序算法之MERGE法与BUTTOMUPSORT法(C语言实现)
来源:互联网 发布:win764精简游戏优化版 编辑:程序博客网 时间:2024/05/16 17:52
一、MERGE法
描述:对于任一给定序列(数组)array,大小为N,里面有这样两个序列序列,array[p]<=array[p+1]...<=array[q],
array[q+1]<=array[q+2]...<=array[r],其中(0<=p<=q<r<=N),对这两个子序列进行进行非降序排列。
输入:1、数组,2、第一个序列的首尾索引,3、第二个序列的尾索引
输出:对两个子序列排序好后的数组
算法描述如下:
void merge(int array[],int first_head,int first_end,int second_end)
{
int num = second_end-first_head+1;
int *tmp_array = (int *)malloc(sizeof(int)*num);
int i = 0;
int s = first_head;
int t = first_end+1;
while(s <= first_end && t <= second_end)
{
if(array[s] <= array[t])
{
tmp_array[i] = array[s];
s++;
}
else
{
tmp_array[i] = array[t];
t++;
}
i++;
}
if(s > first_end && t <= second_end)
{
while(t <= second_end)
{
tmp_array[i]=array[t];
t++;
i++;
}
}
if(s <= first_end && t > second_end)
{
while(s <= first_end)
{
tmp_array[i]=array[s];
s++;
i++;
}
}
for(;num>0;num--)
{
array[second_end]=tmp_array[num-1];
second_end--;
}
free(tmp_array);
return;
}
二、BUTTOMUPSORT法
描述:对给定数组进行非降序排列
输入:任一给定数组
输出:排序后的数组
算法描述:
void bottomupsort(int array[],int array_size)
{
int num = array_size;
int t = 1;
int s,i;
while(t < num)
{
s = t;
t = 2*s;
i = 0;
while(i+t <= num)
{
merge(array,i,i+s-1,i+t-1);
i = i+t;
}
if(i+s < num)
{
merge(array,i,i+s-1,num-1);
}
}
return;
}
三、实现测试
void main()
{
int i=0;
int num=20;
int a[num];
for(i=0;i<num;i++)
{
srand((int)time((time_t*)NULL));
a[i]=(int)(20.0*rand()/(RAND_MAX+1.0));
sleep(1);
}
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
printf("/n");
bottomupsort(a,num);
for(i=0;i<num;i++)
{
printf("%d ",a[i]);
}
printf("/n");
}
四、测试结果
由观察可知:此算法的时间复杂度为O(nlogn),由于每调一次MERGE都得分配空间,所以空间复杂度为也为O(nlogn)
- 常用排序算法之MERGE法与BUTTOMUPSORT法(C语言实现)
- 常用排序算法总结与代码实现(C语言)
- 详解排序算法C语言代码实现之冒泡排序法(改进)
- 排序算法系列:归并排序(Merge sort)(C语言)
- 用C语言实现常用排序算法
- 常用排序算法C语言实现
- 用C语言实现常用排序算法
- 常用排序算法的C语言实现
- 常用的各种排序算法(C语言实现)
- 常用排序算法分析实现(C语言)
- 几种常用的排序算法(c语言实现)
- 排序算法之插入排序(C语言实现)
- 排序算法之希尔排序(C语言实现)
- 排序算法之选择排序(C语言实现)
- 算法导论(Introduction to Algorithms)之算法入门(插入排序与合并排序C语言实现)
- 详解排序算法C语言代码实现之选择排序法
- C语言常用排序算法(一)
- C语言常用排序算法(二)
- linux下对SD卡分区
- boost库 内存池技术
- C++编码规范02
- MyEclipse 导出 javadoc 乱码解决
- 设置SVN自动启动--Ubuntu10.04
- 常用排序算法之MERGE法与BUTTOMUPSORT法(C语言实现)
- C# 加载xml文档文件及加载xml字符串
- xfire实现webservice
- SilverlightCatchWcfError
- 数据库系统概论-002:关系数据库
- 笔记(二)输入与输出
- 2010总结
- 数据库系统概论-003:关系数据库标准语言
- 数据库系统概论-004:数据库安全