求大神给讲解一下啊,我已经懵逼了

struct Mapmess
{
unsigned int Crosscolumn;
unsigned int Branch;
unsigned int Roadflag;
unsigned short Recordsize;
unsigned int LinkID;
unsigned short Roadnamesize;
char Roadname[30];
};
已经定义好的一个结构体,结构体如上,
然后我定义了一个结构体数组 struct Mapmess maps[length];
length的长度等于63600
然后我根据fopen函数把一个dat的相应的63600条信息读取到这个结构体数组中;
然后我利用数组里的linkid对这个数组信息进行排序;
程序如下:
void Sequencing()
{
int i,j,k;
//struct Mapmess temp;
unsigned int temp;
printf("正在排序中,请稍后....\n");
for(i=0;i<length-1;i++)
{
for(j=0;j<length;j++)
{
if(maps[i].LinkID<maps[j].LinkID)
{

temp = maps[i].LinkID;
maps[i].LinkID = maps[j].LinkID;
maps[j].LinkID = temp;

        }
    }
}
printf("排序完成!\n");

}

然而排序完后再输出LinkID
就变成了
0 40 140 240 340......一直到60000每次加100;
求大神告诉我一下这个到底是为什么啊
我测试了读取后LinkID都是正确
排序过程中也是对的
为什么出来就变了呢!

看看你的输出函数。感觉你怎么直接改变结构体的内容。

你的排序算法有问题,修改如下:
但是还有一个问题,你把LinkID排序了,结构体没变,是不是乱套了?
结构体不需要排序?

 void Sequencing()
{
    int i,j,k;
    //struct Mapmess temp;
    unsigned int temp;
    printf("正在排序中,请稍后....\n");
    for(i=0;i<length-1;i++)
    {
        for(j=i+1;j<length;j++)//修改
        {
            if(maps[i].LinkID<maps[j].LinkID)
            {

                temp = maps[i].LinkID;
                maps[i].LinkID = maps[j].LinkID;
                maps[j].LinkID = temp;
            }
        }
    }
    printf("排序完成!\n");
}

有个可以对结构体数组快速排序的函数qsort(),你可以参考一下。

 注释一下.很多时候我们都会对结构体排序,比如校赛预选赛的那个樱花,一般这个时候都在
cmp函数里面先强制转换了类型,不要在return里面转,我也说不清为什么,但是这样程序会
更清晰,并且绝对是没错的. 这里同样请注意double返回0的问题

#include <stdio.h>
#include <stdlib.h>

struct node
{
     double date1;
     int no;
} s[100];

int i,n;

int cmp(const void *a,const void *b)
{
     struct node *aa=(node *)a;
     struct node *bb=(node *)b;
     return(((aa->date1)>(bb->date1))?1:-1);
}

int main()
{
     scanf("%d",&n);
     for(i=0;i<n;i++)
     {
         s[i].no=i+1;
         scanf("%lf",&s[i].date1);
     }
     qsort(s,n,sizeof(s[0]),cmp);

     for(i=0;i<n;i++) printf("%d   %lf/n",s[i].no,s[i].date1);

     return(0);
}

你这是对结构体排序吗,你这是直接修改linkid 啊。那不管怎么说对linkid来说已经是从小到大了,问题在输出函数,

孩子,我看到你这样排序我也懵逼了,你就把ID变了一下,结构体的其他内容你都没交换。

先不谈你的排序算法的问题…假设可以排序…

如果输出没错的话,也许,linkid的值本来就是这样的…只不过被你排序了才发现“哦,原来是有差一百这样的规律…”,因为原来那么多数无序的时候是看不出这种规律的。

建议使用库函数qsort