自己写的 合并排序
来源:互联网 发布:手机移动数据自己开 编辑:程序博客网 时间:2024/04/28 05:49
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int merge_sort(int a[],int p,int r);//函数声明 ,为调用做准备
int merge (int a[],int p,int q,int r);
int main(void)
{
int a[80]; //申请数组空间,存放待排序数列
a[9]=2; a[10]=4; //为待排序数组赋值
a[11]=5; a[12]=7; // 待排序数组伟 a【9....16]
a[13]=1; a[14]=2;
a[15]=3; a[16]=6;
int p,r; //需要用到的数组下标
p=9; r=16;
merge_sort(a,9,16);// 调用 merge-sort过程,将数组 a【】及其下标 p,r作为参数传递
int i; //输出 排序后的 数组
for(i=9;i<=16;i++)
printf("%d\n",a[i]);
return 0;
}
/*合并过程*/
int merge (int a[],int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
//printf("%d\t %d\t %d\t",p,q,r);
//getchar();
int left[40],right[40];
int i,j,k;
for(i=1;i<=n1;i++)
left[i]=a[p+i-1];
for(j=1;j<=n2;j++)
right[j]=a[q+j];
left[n1+1]=10000;
right[n2+1]=10000;//两个哨兵
i=1;j=1;
for(k=p;k<=r;k++)
{
if (left[i]<=right[j] )
{ a[k]=left[i]; i++;}
else {a[k]=right[j];j++;};
}
return 0;
}
/* 排序过程*/
int merge_sort (int a[],int p,int r)
{
int q=0; // 会用到的数组下标
if (p<r )
{
q=(int) (p+r)/2;
merge_sort(a,p,q);// 逐步分解问题
merge_sort(a,q+1,r);
merge (a,p,q,r);//合并
}
return 0;
#include <math.h>
#include <stdlib.h>
int merge_sort(int a[],int p,int r);//函数声明 ,为调用做准备
int merge (int a[],int p,int q,int r);
int main(void)
{
int a[80]; //申请数组空间,存放待排序数列
a[9]=2; a[10]=4; //为待排序数组赋值
a[11]=5; a[12]=7; // 待排序数组伟 a【9....16]
a[13]=1; a[14]=2;
a[15]=3; a[16]=6;
int p,r; //需要用到的数组下标
p=9; r=16;
merge_sort(a,9,16);// 调用 merge-sort过程,将数组 a【】及其下标 p,r作为参数传递
int i; //输出 排序后的 数组
for(i=9;i<=16;i++)
printf("%d\n",a[i]);
return 0;
}
/*合并过程*/
int merge (int a[],int p,int q,int r)
{
int n1=q-p+1;
int n2=r-q;
//printf("%d\t %d\t %d\t",p,q,r);
//getchar();
int left[40],right[40];
int i,j,k;
for(i=1;i<=n1;i++)
left[i]=a[p+i-1];
for(j=1;j<=n2;j++)
right[j]=a[q+j];
left[n1+1]=10000;
right[n2+1]=10000;//两个哨兵
i=1;j=1;
for(k=p;k<=r;k++)
{
if (left[i]<=right[j] )
{ a[k]=left[i]; i++;}
else {a[k]=right[j];j++;};
}
return 0;
}
/* 排序过程*/
int merge_sort (int a[],int p,int r)
{
int q=0; // 会用到的数组下标
if (p<r )
{
q=(int) (p+r)/2;
merge_sort(a,p,q);// 逐步分解问题
merge_sort(a,q+1,r);
merge (a,p,q,r);//合并
}
return 0;
}
虽然开始漏洞百出,但是自己写的过程中,确实收获很多啊。
- 自己写的 合并排序
- 自己写的插入排序
- 自己写的快速排序
- 自己写的堆排序。第一次写
- 自己写的一些排序算法
- 快速排序 我自己写的
- 自己写的一个快速排序
- 自己写的插入排序c++实现!
- 自己写的归并排序(源码)
- 自己写的一个快速排序
- 自己写的一个归并排序
- 自己用java写的快速排序
- 自己写的递归快速排序(c++)
- 还原自己写的冒泡排序
- 自己写的选择排序,非最优
- 我自己写的归并排序。。
- 自己写的 傻瓜 插入排序
- 自己写的 傻瓜 选择排序
- java 中equals方法的覆盖
- Bitmap Drawable相互转换
- Hadoop0.20.2中wordcount程序分析
- 问1:uboot在启动linux的时候,只eth0:link down 后就没反映是什么问题?
- C++中,类继承的内存布局
- 自己写的 合并排序
- PHP学习 Session 学习
- 让照片有声有色
- Android4.0开机启动速度优化过程经验总结
- protell99 使用细节
- CSS颜色渐变(兼容IE、Firefox、Chrome、Safari)
- linux下C语言多线程编程实例
- HTML5 Video Conferencing
- 非对称加密(RSA、DH密钥交换算法、数字签名)