马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
请问哪里错了呀 找半天找不出来 #include<stdio.h>
#include<stdio.h>
#define MAX_size 100
typedef struct{
int a[MAX_size];
int length;
}SqLiszt;
void Merge(int *sr,int *tr,int i,int m,int n){ //m为中间数 归并到tr sr 1-m
int p1 =i,p2=n,temp = i;
while(p1<=m&& p2<=n){
if(sr[p1]<sr[p2])
tr[temp++]= sr[p1++];
else
tr[temp++]= sr[p2++];
}
while(p1<=m){
tr[temp++]= sr[p1++];
}
while(p2<=n){
tr[temp++]= sr[p2++];
}
}
void M_Sort(int *sr, int *tr1,int s,int t){ //s 为第一个 ,t 为最后一个
int mid;
int tr2[MAX_size+1];
if(s==t){
tr1[s]= sr[s];
}
else{
mid = (s+t)/2;
M_Sort(sr,tr2,s,mid);
M_Sort(sr,tr2,mid+1,t);
Merge(tr2,tr1,s,mid,t);
}
}
void
Merge_sort(SqLiszt *L){
M_Sort(L->a,L->a,1,L->length);
}
int main(){
SqLiszt L;
L.length =0;
int temp;
for(int i =1;i<=10;i++){
temp = 10-i;
L.a[i] = temp;
L.length ++;
}
Merge_sort(&L);
printf("排序后的结果为:\n");
for(int i= 1; i<=L.length;i++){
printf("%d ",L.a[i]);
}
return 0;
}
代码还没有看完,不知道其他地方有没有问题,但这里肯定不对,代码的其他部分我再看看
这里的 p2 应该初始化为 m + 1 int p1 = i, p2 = m + 1, temp = i;
|