c - 我已多次调用此函数以正确排序记录结构中的元素
问题描述
我正在学习 C,并且正在编写一个存储记录的基本程序。当我尝试按姓氏的字母顺序对结构数组中的元素进行排序(我不知道我说得对不对)时,我发现我必须多次调用该函数才能使其真正对所有元素进行排序.
我相信问题出在 ret = strcmp(rec[j2].lastname, rec[j2 + 1].lastname); 以及它在代码中的位置。它运行一次并对数组中的两个元素进行排序,但我必须多次调用该函数才能使其完全排序。我已经尝试将该行放在它自己的 for() 循环和 while() 循环中,但我还没有找到解决方案。
typedef struct rec {
int recordnumber;
char firstname[20];
char lastname[20];
int age;
char gender;
} record;
void SortArr(record* rec, int numrecsread)
{
int sortchoice;
int i2, j2, temp, ret;
record *r1, *r2;
record trec;
printf("Press 1 to sort by record number or press 2 to sort by last name.\n");
scanf("%d", &sortchoice);
if (sortchoice == 1)
{
printf("You have chosen to sort record numbers in ascending order...\n");
for (i2 = 1; i2 < numrecsread; i2++)
{
for (j2 = 0; j2 < numrecsread - 1; j2++)
{
if (rec[j2].recordnumber > rec[i2].recordnumber)
{
Swap(&rec[i2], &rec[j2]);
}
}
}
}
else if (sortchoice == 2)
{
printf("You have chosen to sort last names alphabetically...\n");
for (i2 = 1; i2 < numrecsread; i2++)
{
for (j2 = 0; j2 < numrecsread - 1; j2++)
{
ret = strcmp(rec[j2].lastname, rec[j2 + 1].lastname); //this has to be called multiple times to fully sort
if (ret > 0)
{
Swap(&rec[i2], &rec[j2]);
}
}
}
}
else if (sortchoice < 1 || sortchoice > 2)
{
printf("Invalid input.\n");
}
}
现在我有四个记录存储在我的数组中。预期的结果是,只需一次调用该函数,它们就会按姓氏的字母顺序排序。按记录编号进行数字排序可以正常工作。
解决方案
这是一个用c语言进行的算法,用于执行“冒泡”排序。
请注意发布的代码和冒泡排序算法之间的巨大差异。
注意:还有很多其他的排序算法,但 OP 发布的代码不是其中之一。
// A function to implement bubble sort
void bubbleSort(int arr[], int n)
{
int i, j;
for (i = 0; i < n-1; i++)
// Last i elements are already in place
for (j = 0; j < n-i-1; j++)
if (arr[j] > arr[j+1])
swap(&arr[j], &arr[j+1]);
}
上述算法来自:冒泡排序
推荐阅读
- javascript - 从 JSON 文件读取图像得到空白页面
- angular - 根据当前会话值将登录/退出按钮添加到侧边栏
- mysql - 具有两个父级的 MySQL 表 - 在行删除期间,删除不会级联 - Google Cloud SQL
- reactjs - 在组件中设置类型?
- javascript - 设置复选框列表的样式
- python - 如何修复“ValueError:提供的数据在使用特征大小 17721 进行训练时具有 1 个维度”使用 sklearn LDA 模型进行预测
- milo - 有人检查在 kubernetes 环境中工作的 milo 服务器上的订阅行为吗?
- c# - 动态添加条件,无需每次都重新部署
- wordpress - $wpdb->insert 一次添加 3 行
- python - 为什么我的 contextProcessor 不适用于所有模板?django 2.2.1