结构体数组排序,结构体数组排序成绩

http://www.itjxue.com  2023-01-22 09:01  来源:未知  点击次数: 

求教一个问题,如何用sort对结构体数组排序

步骤:

#include iostream

#include vector

#include algorithm

using namespace std;

typedef struct example

{

int elem1;

int elem2;

}example;

/*这个comparison函数很重要.如果希望升序排序,就是"",降序排列就是""号,这样便于直观记忆.如果希望用elem2作为比较标准

就把elem1改为elem2,这样结构体就以elem2为比较标准排序了.*/

bool comparison(example a,example b){

return a.elem1b.elem1;

}

int main()

{

int N;

finN;

vectorexample array(N);

for(int i=0;iN;i++)

{

finarray[i].elem1array[i].elem2;

}

sort(array.begin(),array.end(),comparison);

for(int i=0;iN;i++)

{

coutarray[i].elem1" "array[i].elem2endl;

}

return 0;

}

C语言中结构体数据排序

设结构体名为AAA,结构体数组声明为struct AAA a[N];(N为宏定义常量),身份证成员名为id,则排序函数可如下写——

#include?"stdio.h"

#include?string.h

#define?N?3

struct?AAA{

char?id[20];

int?age;

};

void?mysort(struct?AAA?*p){//排序函数

struct?AAA?t;

int?i,j,k;

for(i=0;iN;i++){

for(k=i,j=k+1;jN;j++)

if(strcmp((p+j)-id,(p+k)-id)0)

k=j;

if(i!=k)

t=*(p+k),*(p+k)=*(p+i),*(p+i)=t;

}

}

int?main(int?argc,char?*argv[]){//测试主函数

struct?AAA?a[N]={{"650104194812109907",77},{"333018201801015555",1},{"650104194812109903",80}};

mysort(a);

printf("%s\t%d\n",a[0].id,a[0].age);

printf("%s\t%d\n",a[1].id,a[1].age);

printf("%s\t%d\n",a[2].id,a[2].age);

return?0;

}

运行结果:

结构体数组如何排序,我写的程序为何排序后还是老样子??没有交换呢??

//选择最小值

int selectmin(int i)

{

int min=i;

for(int j=i;j=count;j++)

{

if(stu[i].roomstu[min].room) min=j; //这里就是问题了,min==i,所以min=j 永远不会执行

}

return min;

}

将上面注释的那一句的 i 改成 j 就行了

结构体数组定义的排序

#include "stdafx.h"

#include "stdio.h"

#include string.h

#include stdlib.h

#include conio.h

void bubble_sort(int a[2][4],int n);

void bubble_sort(int a[2][4],int n)//n为数组a的元素个数

{

int i,j,temp,temp2;

for(j=0;jn-1;j++)

for(i=0;in-1-j;i++)

{

if(a[1][i]a[1][i+1])//数组元素大小按升序排列

{

temp=a[0][i];

a[0][i]=a[0][i+1];

a[0][i+1]=temp;

temp2=a[1][i];

a[1][i]=a[1][i+1];

a[1][i+1]=temp2;

}

}

}

int main()

{

int m[2][4] = {{21,22,23,24},{90,80,98,99}};

int i;

for (i=0;i 4;i++)

{

printf("输入 %d 号学生分数:\n\t\t ",m[0][i]);

scanf("%d",m[1][i]);

}

bubble_sort(m,4);

for(i=0;i4;i++)

{

printf("%d,%d\n",m[0][i],m[1][i]);

}

system("PAUSE");

}

c语言 qsort 对结构体数组排序

■可能的一个原因是compare 里给a、b赋值的时候,后面强制类型转换应为(struct record *)而非(record *)。

■可能另一个原因是你的源文件名后缀(DECVPP据此判断是C程序还是C++程序),如果是纯C的,就用.c;如果是C++的,用.cpp。

■还有可能是你没有包含必要的头文件?

我根据你的代码做了个简单的测试,在VC6下运行正常(由大到小按point排)。

#include stdio.h

#include stdlib.h

struct record

{

char name[35];

int point;

int match[3];

int goal[2];

} ;

int compare(const void *p1,const void *p2);

void input(struct record s[], int n);

void output(struct record s[], int n);

int main()

{

struct record team[35];

int teams = 35;

input(team, 5);

qsort(team,teams,sizeof(team[0]),compare);

output(team, 5);

return 0;

}

int compare(const void *p1,const void *p2)

{

struct record *a= (struct record *)p1;

struct record *b= (struct record *)p2;

int result=0;

if(a-point b-point)

return -1;

else if(a-point b-point)

return 1;

else

return 0;

}

void output(struct record s[], int n)

{

int i=0;

while(in)

{

printf("%d ",s[i].point);

i++;

}

return;

}

void input(struct record s[], int n)

{

int i=0;

while(in)

{

scanf("%d",(s[i].point));

i++;

}

return;

}

是否可以解决您的问题?

C语言 结构体数组排序问题

标准C是不支持你这种变量定义动态数组的

struct item all[N]; 这达不到你想要的效果!需要定义成指针,然后malloc

int i,j;

printf("请输入%d组信息:\n",N);

struct item *all ;

int i,j;

printf("请输入%d组信息:\n",N);

all=(struct item *)malloc(sizeof(struct item)*N ) ;

以下代码不变,文件头加上库函数头文件 #include stdlib.h

(责任编辑:IT教学网)

更多

推荐浏览器文章