【发布时间】:2017-02-19 10:10:48
【问题描述】:
我需要一个代码,使用冒泡排序算法按名称或年龄升序对结构数组进行排序。
我阅读了所有元素并且理解了排序的部分。问题是我应该只声明一种能够根据姓名或年龄进行排序的冒泡排序算法。同样,当两个名字或年龄相同时,我应该比较不同的元素。为此,我应该使用函数指针。我刚刚开始使用函数指针,但在这里我看不到出路。非常感谢您的帮助。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct person {
char name [30];
int age;
};
void bubblesort(struct person *prs, int n)
{
struct person temp;
int i, j , a,b;
for(i=0;i<n; i++)
{
for(j=0; j <n-1; j++)
{
a=strcmp(prs[j].name, prs[j+1].name);
b=prs[j+1].age - prs[j].age;
if(a>0)
{
temp=prs[j];
prs[j]=prs[j+1];
prs[j+1]=temp;
}
else if(a==0 && b<0)
{
temp=prs[j];
prs[j]=prs[j+1];
prs[j+1]=temp;
}
}
}
}
int main()
{
int n, i;
struct person *prs;
scanf("%d", &n);
getchar();
prs=(struct person *)malloc(sizeof(struct person)*n);
for(i=0;i<n;i++)
{
fgets(prs[i].name, 30, stdin);
prs[i].name[strlen(prs[i].name)-1]='\0';
scanf("%d", &prs[i].age);
getchar();
}
bubblesort(prs,n);
for(i=0;i<n;i++)
{
printf("{%s, %d};", prs[i].name, prs[i].age);
}
return 0;
}
【问题讨论】:
-
看
qsort的原型。它应该为您提供足够的提示,让您了解如何编写通用的排序函数。 -
我不能使用 qsort。我已经知道如何使用 qsort。我不得不创建这个冒泡排序函数,而不是 qsort。
-
我没说你使用 qsort。我说你研究它是如何定义的,这样你就可以编写自己的排序函数,天哪......
标签: c algorithm sorting function-pointers bubble-sort