结构体排序出错,求高人指点!!!

KPRF2009 2011-10-18 04:53:58


结构体排序出错,求高人指点!!!


下面红色的语句注释了就正确了,不注释就出错,应该是排序出错
----------------------------------------------------------------------------------------------


#include<iostream>
int n,m,k,nn,mm,tjcs;

int st[1010][1010],end[1010][1010],data[1010][1010],qz[1010][1010];

struct s_node
{
int x,y,z;
int tdata[1010][1010];
}mk[110];




int cmp(const void *a,const void *b)
{
s_node t1=*(s_node *)a;
s_node t2=*(s_node *)b;

if(t1.z>t2.z)return 1;
if(t1.z<t2.z)return -1;
return 0;
}

void readMap()
{
scanf("%d %d",&n,&m);

for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&st[i][j]);

for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&end[i][j]);

scanf("%d",&k);
for(int i=1;i<=k;i++)
{
scanf("%d %d",&nn,&mm);

mk[i].x=nn;mk[i].y=mm;

for(int j=1;j<=nn;j++)
for(int l=1;l<=mm;l++)
{
scanf("%d",&mk[i].tdata[j][l]);
}
mk[i].z=nn*mm;
}


qsort(&mk[1],k,sizeof(mk),cmp);
}



int main(void)
{
freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);

readMap();

return 0;
}
...全文
92 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
fmpdceudy 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 kprf2009 的回复:]

引用 4 楼 fmpdceudy 的回复:
C/C++ code

int cmp(const void *a,const void *b)
{
s_node *t1=(s_node *)a;
s_node *t2=(s_node *)b;

if(t1->z>t2->z)return 1;
if(t1->z<t2->z)return -1;
return 0;
}

……
[/Quote]
我这边运行通过了呀,实现的是按照数据元素个数进行递增排列

#include <stdio.h>
#include <stdlib.h>
int n,m,k,nn,mm,tjcs;

int st[1010][1010],end[1010][1010],data[1010][1010],qz[1010][1010];

struct s_node
{
int x,y,z;
int tdata[1010][1010];
}mk[110];

int cmp(const void *a,const void *b)
{
s_node *t1=(s_node *)a;
s_node *t2=(s_node *)b;

if(t1->z>t2->z)return 1;
if(t1->z<t2->z)return -1;
return 0;
}

void readMap()
{
scanf("%d %d",&n,&m);

for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&st[i][j]);

for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
scanf("%d",&end[i][j]);

scanf("%d",&k);
for(int i=1;i<=k;i++)
{
scanf("%d %d",&nn,&mm);

mk[i].x=nn;mk[i].y=mm;

for(int j=1;j<=nn;j++)
for(int l=1;l<=mm;l++)
{
scanf("%d",&mk[i].tdata[j][l]);
}
mk[i].z=nn*mm;
}


qsort(&mk[1],k,sizeof(mk[1]),cmp);
}



int main(void)
{
freopen("1.txt","r",stdin);
freopen("2.txt","w",stdout);

readMap();

return 0;
}

AndyZhang 2011-10-18
  • 打赏
  • 举报
回复
上面是不对的,为何return -1 0 1.直接就return true 和false就对了啊
KPRF2009 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 fmpdceudy 的回复:]
C/C++ code

int cmp(const void *a,const void *b)
{
s_node *t1=(s_node *)a;
s_node *t2=(s_node *)b;

if(t1->z>t2->z)return 1;
if(t1->z<t2->z)return -1;
return 0;
}


qsort(&mk[1],k,siz……
[/Quote]


还是有错
尘缘udbwcso 2011-10-18
  • 打赏
  • 举报
回复

/*
*功能:链表排序(冒泡)
*参数:链表首地址
*/
LinkType sort(LinkType head)
{
LinkType pri, mid, tai, p;
p = head->next;
while(p != NULL)
{
mid = head->next;
if(head->data > head->next->data)
{
head->next = mid->next;
mid->next = head;
head = mid;
}
pri = head;
mid = head->next;
tai = mid->next;
while(mid->next != NULL)
{
if(mid->data > tai->data)
{
pri->next = mid->next;
mid->next = tai->next;
tai->next = mid;
}
pri = pri->next;
mid = pri->next;
tai = mid->next;
}
p = p->next;
}
return head;
}

fmpdceudy 2011-10-18
  • 打赏
  • 举报
回复

int cmp(const void *a,const void *b)
{
s_node *t1=(s_node *)a;
s_node *t2=(s_node *)b;

if(t1->z>t2->z)return 1;
if(t1->z<t2->z)return -1;
return 0;
}


qsort(&mk[1],k,sizeof(mk[1]),cmp);
PG 2011-10-18
  • 打赏
  • 举报
回复
。。。。。

输入是什么?
期望输出是什么?

经过调试后感觉错的地方在哪?

是否有错误信息?

源代码有否加必要注释?

你就这样丢一堆ASCII字符出来,你想干什么?
KPRF2009 2011-10-18
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 bdmh 的回复:]
跟踪啊,做个数量少的数组,自己跟踪一下
[/Quote]

没用呀。。。。


3 4
0 1 1 1
1 1 1 1
1 1 1 1
1 1 1 1
0 1 1 1
1 1 1 1
3
1 1
1
2 2
1 0
0 0
3 1
0
1
1


这组数据,麻烦帮忙看看
bdmh 2011-10-18
  • 打赏
  • 举报
回复
跟踪啊,做个数量少的数组,自己跟踪一下

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧