C语言中结构体数组排序排序后输出第一组是乱码

C语言 关于结构体排序 要用qsort_百度知道
C语言 关于结构体排序 要用qsort
#include &stdio.h&
#include &stdlib.h&
#define NUM 5
struct Student { char name[20]; float score[3]; };
void input(struct Student* ps,int n)
struct Student *p;
for(p=p&ps+NUM;p++)
scanf(&%d%s%f%f%f&,&p-&num,p-&name...
我有更好的答案
int b, 选择排序, const void* b)
都是有两个元素 作为参数;我想给 dddd这个数组排序,那怎么办;}你想让身高最小的人排在最前面,冒泡排序都要快;},特殊场合例外),如果有一个 结构 strunt 人{int 身高;int 体重。同样的道理, num
dddd[100],所以系统也在库里实现这个算法,便于我们的使用。这就是qsort,返回一个int 值。比较函数的作用就是给qsort指明 元素的大小是怎么比较的,但实际上是a大于b的,所以就造成升降序的差别了, 如果 比较函数返回大于0,比选择排序。qsort 知道元素大小,就可以把大的放到前面去。如果你的比较函数放回本来应该是1 的(a&b),快速排序等,就把 b放到前面去;b , 如果比较函数返回等于0 qsort就认为a 和b 这两个元素相等,返回小于零 qsort就认为 a&b 的,你比较函数却返回一个 -1 (小于零的)那么qsort认为a&lt,冒泡排序,归并排序,qsort就认为 a&gt,是为了做到通用性更好一点。比如你不仅仅的是要排序一个数字而已,可能你要用来排序几个数字 ,比如有一个结构struct num {int a。这是因为他速度很快;然后我有一个num 类型的数组。像这样的比较函数 inline int MyCmp(const void* a? 我想让 a +b 最大的num元素排在数组的最前面,那又怎么办?这都可以通过定义比较函数来做到的。qsort 要求提供一个 比较函数。看名字都知道快速排序 是目前公认的一种比较好的排序算法(我没听书速度比这快的了排序方法有很多种,那么你也要自己定义自己的比较函数
采纳率:32%
这个 ,,,,我不太会啊
本回答被网友采纳
Student'score[0]+c-&score[1]+c-& struct Student *d =(struct Student*)b; if((c-&gt: undeclared identifiercompare1的函数修改如下;score[1]+c-&score[2]));score[2]);score[2])-(c-&score[0]+c-&score[0]+d-&score[1]+d-&gt: 'score[1]+d-&score[2]))
return ((d-&num,const void*b){ struct Student *c=(struct Student*)a;num-d-& :error C2065(13); else
return c-&gt:int compare1(const void*a!= (d-&score[0]+d-&gt
struct Student *c=(Student*)a;(Student*) 要改成(struct Student*)用结构体名的时候一定要加个关键字struct
我运行了好像没问题,可能是编译器的问题
其他2条回答
为您推荐:
其他类似问题
qsort的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。12:15 提问
冒泡排序可以这样写吗,我只对结构体数组中某一个元素进行排序,然后交换
struct troop
char name[1];
void bubblesort(int a, int b, int c)
for (i=a; i
for (j=a+1; j
if (tro[j].a[c] & tro[i].a[c])
temp = tro[j];
tro[j] = tro[i];
回复数排序
把代码放到代码片里,工具栏上面有。否则粘贴错误太多。
把你代码编译下有错误
void bubblesort(int a, int b, int c)
不允许使用不完整的类型
for (i=a; i&-;i++)
for (j=a+1; j&-;j++)
if (tro[j].a[c] & tro[i].a[c])//错误 “tro”: 未声明的标识符
temp = tro[j];
tro[j] = tro[i];
你的结构体后面那个tro[4]是什么意思?是多个结构体组吗?
只对一个交换
这里面应该就是结构体数组咯
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐C语言结构体排序问题_百度知道
C语言结构体排序问题
样定义的结构体;
int yu。 struct student
char name[20];
是这样的按数学成绩排整个表,就是根据数学成绩排一整行。
我有更好的答案
shu &i&20-1; ss[j]=ss[j-1]; ss[j-1]=t就是排序问题嘛,跟结构体有啥关系;i++) { for(j=20-1; ss[j]=ss[j-1]; ss[j-1]=t;j&i;j--){ if(ss[j]; ss[j-1].shu) { t=ss[j]; } } }补充:只需要在交换的时候,按整个结构体换,就行了啊下面交换代码中的t和ss都是结构体啊struct student ss[20],t; t=ss[j]?比较结构体中的shu成员啊冒泡排序的核心代码如下:struct student ss[20],t; for(i=0
采纳率:37%
你意思就是说只把数学成绩的数据拿来排了,其他的就不管了?那就跟一般的排序没什么两样了,可以参考他们的冒泡排序的核心来改就完了。
和一般的排序问题一样。
struct student ss[20],t;for(i=0;i&20;i++){for(j=i;j&20;j++){if(ss[i].shu & ss[j].shu){t=ss[i];ss[i]=ss[j];ss[j]=t;}}}
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
结构体的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。他的最新文章
他的热门文章
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)c语言 用结构体,输入10本书的名字和价格,排序后输出。_百度知道
c语言 用结构体,输入10本书的名字和价格,排序后输出。
下面是我的代码,不知道为什么排序实现不了,请各位大侠帮看看,谢谢了。
#include&stdio.h&
struct book
char name[40];
void main()
struct book book[10],
printf(&Çë·Ö±ð&#20...
我有更好的答案
改为scanf(&quot,&book[i].price);j&10;%s%f&quot、for(j=0,&book[i].3;j++)可以改为for(j=0,&book[i].price);2、scanf(&%s%f&,改为struct book book[10]1、struct book book[10];,book[i].j&10-i
1,term为整型的话怎么和book赋值?2,scanf函数不取地址怎么输入?
#include &stdio.h&#include &string.h&struct book{
char name[40];};int main(){
struct book book[10],
printf(&Input:\n&);
for(i=0;i&10;i++)
scanf(&%s%f&,book[i].name,&book[i].price);
for(i=0;i&10;i++){
for(j=i;j&10;j++){
if(book[i].price&book[j].price){
temp=book[i];
book[i]=book[j];
printf(&print\n&);
for(i=0;i&10;i++)
printf(&%d
%8.2f\n&,i, book[i].name,book[i].price);
return 0;}这是我修改的你可以看看1、当把temp改为int时,还要加多一个char buf[40];用来暂存name和price,如果不改,你那样做饭是正确的,是我错了2、book[i].name本来就是一个字符串数组的首地址,所以不需要引用&
为您推荐:
其他类似问题
您可能关注的内容
油性漆的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 如何对结构体数组排序 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信