| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 954 人关注过本帖, 1 人收藏
标题:归并排序问题
只看楼主 加入收藏
zsh981022984
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
威 望:6
帖 子:36
专家分:153
注 册:2015-12-6
结帖率:0
收藏(1)
 问题点数:0 回复次数:2 
归并排序问题
#include <stdio.h>
#include <stdlib.h>
#define OIL 100
void Mergesort(int y[],int n)
{
    //调用Merge()给数组排序
    //输入:无序y[0...n]
    //输出:有序y[0...n]
    void Merge(int y1[],int L1,int y2[],int L2,int y[]);
    int y1[OIL];
    int y2[OIL];
    int i=0;
    int j=0;
    int l=n/2;
    if(n>1)
    {
        for(i;i<n/2;i++)
        {
            y1[i]=y[i];
        }
        for(j;j<n-l+1;j++)
        {
            y2[j]=y[l];
            l++;
        }
        Mergesort(y1,i);
        Mergesort(y2,j);
        Merge(y1,i,y2,j,y);   
    }
}
void Merge(int y1[],int L1,int y2[],int L2,int y[])
{
    //将数组y1[0...L1]与数组y2[0...L2]按顺序排入y[]中
    //输入数组y1[0...L1],数组y2[0...L2],数组y[]
    //输出排好序的数组y[0...n]
    int i=0,j=0,k=0;
    while(i<L1 && j<L2)
    {
        if(y1[i]<=y2[j])
        {
            y[k]=y1[i];
            i++;
        }
        else
        {
            y[k]=y2[j];
            j++;
        }
        k=k+1;
    }
    if(i==L1)
        for(j;j<L2;j++)
        {
            y[k]=y2[j];
            k=k+1;
        }
    else
        for(i;i<L1;i++)
        {
            y[k]=y1[i];
            k++;
        }
}

void main()
{
    int n,i;
    int y[OIL];                    //管道东西向位置只与y坐标有关
    printf("输入油井数n:");
    scanf("%d",&n);
    printf("输入油井y坐标:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&y[i]);
    }
    Mergesort(y,n);
    for(i=0;i<n;i++)
    {
        printf("%3d",y[i]);
    }
    printf("\n");
    getch();
}
搜索更多相关主题的帖子: include 
2017-04-08 18:43
zsh981022984
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
威 望:6
帖 子:36
专家分:153
注 册:2015-12-6
收藏
得分:0 
没人吗,能输出,但是不能排超过四位数的序

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2017-04-08 19:22
zsh981022984
Rank: 3Rank: 3
来 自:湖南
等 级:论坛游侠
威 望:6
帖 子:36
专家分:153
注 册:2015-12-6
收藏
得分:0 
以解决
#include <stdio.h>
#include <stdlib.h>
#define OIL 100
void Mergesort(int y[],int n)
{
    //调用Merge()给数组排序
    //输入:无序y[0...n]
    //输出:有序y[0...n]
    void Merge(int y1[],int L1,int y2[],int L2,int y[]);
    int y1[OIL];
    int y2[OIL];
    int i=0;
    int j=0;
    int l=n/2;
    int k=n/2;
    if(n>1)
    {
        for(i;i<n/2;i++)
        {
            y1[i]=y[i];
        }
        for(j;j<n-k;j++)
        {
            y2[j]=y[l];
            l++;
        }
        Mergesort(y1,i);
        Mergesort(y2,j);
        Merge(y1,i,y2,j,y);   
    }
}
void Merge(int y1[],int L1,int y2[],int L2,int y[])
{
    //将数组y1[0...L1]与数组y2[0...L2]按顺序排入y[]中
    //输入数组y1[0...L1],数组y2[0...L2],数组y[]
    //输出排好序的数组y[0...n]
    int i=0,j=0,k=0;
    while(i<L1 && j<L2)
    {
        if(y1[i]<=y2[j])
        {
            y[k]=y1[i];
            i++;
        }
        else
        {
            y[k]=y2[j];
            j++;
        }
        k=k+1;
    }
    if(j<L2)
        for(j;j<L2;j++)
        {
            y[k]=y2[j];
            k=k+1;
        }
    if(i<L1)
        for(i;i<L1;i++)
        {
            y[k]=y1[i];
            k++;
        }
}

void main()
{
    int n,i;
    int y[OIL];                    //管道东西向位置只与y坐标有关
    printf("输入油井数n:");
    scanf("%d",&n);
    printf("输入油井y坐标:");
    for(i=0;i<n;i++)
    {
        scanf("%d",&y[i]);
    }
    Mergesort(y,n);
    for(i=0;i<n;i++)
    {
        printf("%3d",y[i]);
    }
    printf("\n");
    getch();
}

因为有了因为,所以有了所以,既然已成既然,何必再说何必
2017-04-08 19:32
快速回复:归并排序问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.024103 second(s), 11 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved