归并排序问题
#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();
}