排序-----二分治
来源:互联网 发布:论文图是用什么软件 编辑:程序博客网 时间:2024/06/06 18:41
关于二分治的排序,我们用到的是递归思想,直至数组只含有一个元素的时候,再利用合并的思想,根据预先设计好的排列方式进行代码的优化过程。对于合并的过程,首先应该计算数组被分开两端的分别长度,然后再定义两个数组,分别用于存储前后两个部分的元素,对于元素的进入,要进行所谓的正确方法,书上定义了一个末值标记点,但是我认为这是没有必要的,因为我们只需找到最后一个元素即可,然后将剩余的直接拿下来。。总之二分制的思想无非就是分和合,什么时候分,以及怎样去分这是关键,闲话少说,还是直接上代码吧;
C语言: Codee#12903
#include <stdio.h>
#define MAX 1000
void Merage(int *a,int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
int i,j,k;
int b[MAX],c[MAX];
for(i=1;i<=n1;i++)
{
b[i]=a[p+i-1];
}
for(j=1;j<=n2;j++)
{
c[j]=a[q+j];
}
i=j=1;
for(k=p;k<=r;k++)
{
if(c[i]<=b[j])
a[k]=b[j++];
else
a[k]=c[i++];
}
}
void Merage_Sort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
Merage_Sort(a,p,q);
Merage_Sort(a,q+1,r);
Merage(a,p,q,r);
}
else
return;
}
int main()
{
int a[MAX];
int n;
int i;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
Merage_Sort(a,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("/n");
}
return 0;
}
#define MAX 1000
void Merage(int *a,int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
int i,j,k;
int b[MAX],c[MAX];
for(i=1;i<=n1;i++)
{
b[i]=a[p+i-1];
}
for(j=1;j<=n2;j++)
{
c[j]=a[q+j];
}
i=j=1;
for(k=p;k<=r;k++)
{
if(c[i]<=b[j])
a[k]=b[j++];
else
a[k]=c[i++];
}
}
void Merage_Sort(int *a,int p,int r)
{
int q;
if(p<r)
{
q=(p+r)/2;
Merage_Sort(a,p,q);
Merage_Sort(a,q+1,r);
Merage(a,p,q,r);
}
else
return;
}
int main()
{
int a[MAX];
int n;
int i;
while(scanf("%d",&n)!=EOF)
{
for(i=1;i<=n;i++)
{
scanf("%d",&a[i]);
}
Merage_Sort(a,1,n);
for(i=1;i<=n;i++)
{
printf("%d ",a[i]);
}
printf("/n");
}
return 0;
}
- 排序-----二分治
- 分治与递归(二)--- 快速排序
- 分治法之二路归并排序
- 学习笔记(二)分治排序
- 分治算法二(快速排序)
- 分治排序
- 分治排序
- 分治排序
- 分治排序
- 排序算法大集锦_二路归并排序_2&3(分治思想)
- 分治法合并排序
- 分治递归排序
- 分治策略----快速排序
- 分治法排序
- 合并排序,分治思想
- 分治法,归并排序
- 分治排序示例
- 分治合并排序
- Java接口和Java抽象类
- 扫描算法求一个向量的元素和最大的连续子向量
- 很有用的小数化为分数算法!小学生的~
- (转)Struts相关jar包简介
- 开博客??
- 排序-----二分治
- C语言字符串操作函数
- 软件随想录
- 杭电 1081 To The Max
- JS advice: Be careful the difference between Undefined and ‘ ’
- asterisk dialplan中MYSQL命令的使用
- 推箱子,增加箱子是否卡死的简单判断,别小看这段代码,可大量剪枝,效率提升可观。
- Ubuntu 添加右键终端
- Eclipse/MyEclipse中SVN代理使用及设置SVN代理方法详解