|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
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;
复制代码
|
|