结构体数组排序,结构体数组排序成绩
求教一个问题,如何用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