user-0 提问: 稳定排序acm

回复:
user: user-0
content: 改成这样 还是错 改怎么改 #include<stdio.h> void swap(int *point1,int *point2) {     int t;     t=*point1;     *point1=*point2;     *point2=t; } void sort(int a[],int t,int c[]) {     int i,j,n,m;     for(i=0;i<t-1;i++)         for(j=0;j<t-i-1;j++)         {             n=c[j],m=c[j+1];             if(a[n]<a[m])             swap(&c[j],&c[j+1]);         } } int main() {     int t,i,j,k,n,flag,flag2;     int a[305],b[305],c[305];     char str[305][55];     char str1[305][55];     while(scanf("%d",&t)!=EOF)     {         flag=0,flag2=0;         for(i=0;i<t;i++)         c[i]=i;         for(i=0;i<t;i++)         {             getchar();             for(j=0;scanf("%c",&str[i][j]),str[i][j]!=' ';j++);             scanf("%d",&a[i]);         }         sort(a,t,c);         for(i=0;i<t;i++)         {             getchar();             for(j=0;scanf("%c",&str1[i][j]),str1[i][j]!=' ';j++);             scanf("%d",&b[i]);             n=c[i];             if(a[n]!=b[i])             {                 flag=1;             }             else ;         }         for(i=0;i<t&&!flag;i++)         {             n=c[i];             for(k=0;str[n][k]==str1[i][k]&&str[i][k]!=' ';k++);             if(str[n][k]!=str1[i][k])             {                 flag2=1,flag=1;                 for(j=i+1;a[n]==b[j]&&j<t-1;j++)                 {                     for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                     if(str[n][k]==str1[j][k])                     {                         flag=0;                         break;                     }                 }                 if(a[n]==b[j]&&flag)                 {                     for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                     if(str[n][k]==str1[j][k])                     {                         flag=0;                     }                 }                 if(flag==1)                 {                     for(j=i-1;a[n]==b[j]&&j>0;j--)                     {                         for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                         if(str[n][k]==str1[j][k])                         {                             flag=0;                             break;                         }                     }                     if(a[n]==b[j]&&flag)                     {                         for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                         if(str[n][k]==str1[j][k])                         {                             flag=0;                         }                     }                 }             }         }         if(flag)         printf("Error\n");         else if(flag2)         printf("Not Stable\n");         else         printf("Right\n");         if(flag||flag2)             for(i=0;i<t;i++)             {                 n=c[i];                 for(k=0;str[n][k]!=' ';k++)                 printf("%c",str[n][k]);                 printf(" ");                 printf("%d\n",a[n]);             }     }     return 0; }

user: user-0
content: for(j=i-1;a[n]==b[j]&&j>0;j--)             {                 for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                 if(str[n][k]==str1[j][k])                 {                     flag=0;                     break;                 }             }             if(a[n]==b[j])              for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++);                 if(str[n][k]==str1[j][k])                 {                     flag=0;                                     } 这样我还是错

user: user-1
content: for(j=i-1;a[n]==b[j]&&j<t;j--) 				{ 					for(k=0;str[n][k]==str1[j][k]&&str[n][k]!=' ';k++); 					if(str[n][k]==str1[j][k]) 					{ 						flag=0; 						break; 					} 				}  当 i 为0的时候，j-1等于-1，此时str1[j][k] 越界了