c - 如何按字母顺序对结构进行冒泡排序
问题描述
我需要编写一个代码,在结构中注册汽车的车牌、型号、品牌、年份和每日价值。注册这些数据后,我需要根据汽车的牌照对整个结构进行排序,然后在屏幕上显示给用户。例如:
1号车
车牌:IZA-2929
车型:GTR
汽车品牌:日产
汽车年份:2016
日产值:100车2
车牌:BCC-1234
车型:卡罗拉
汽车品牌:丰田
汽车年份:2014
Car DailyValue:50订购...
车2
车牌:BCC-1234
车型:卡罗拉
汽车品牌:丰田
汽车年份:2014
汽车日值:50汽车1
车牌:IZA-2929
车型:GTR
汽车品牌:日产
汽车年份:2016
日产值:100
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct carro
{
char placa[50];
char marca[50];
char modelo[50];
char ano[50];
char valordiaria[50];
};
int main()
{
struct carro car[5];
struct carro temp[5];
strcpy(car[0].placa, "IZA-2929");
strcpy(car[1].placa, "HJZ-1234");
strcpy(car[2].placa, "XCV-3478");
strcpy(car[3].placa, "BSD-8329");
strcpy(car[4].placa, "AHG-8332");
strcpy(car[0].marca, "Chevrolet");
strcpy(car[1].marca, "Volkswagen");
strcpy(car[2].marca, "Ferrari");
strcpy(car[3].marca, "Nissan");
strcpy(car[4].marca, "Ford");
strcpy(car[0].modelo, "Onix");
strcpy(car[1].modelo, "Golf");
strcpy(car[2].modelo, "Enzo");
strcpy(car[3].modelo, "GTR");
strcpy(car[4].modelo, "Ka");
strcpy(car[0].ano, "2013");
strcpy(car[1].ano, "2008");
strcpy(car[2].ano, "2004");
strcpy(car[3].ano, "2017");
strcpy(car[4].ano, "2015");
strcpy(car[0].valordiaria, "45");
strcpy(car[1].valordiaria, "60");
strcpy(car[2].valordiaria, "80");
strcpy(car[3].valordiaria, "200");
strcpy(car[4].valordiaria, "65");
int q=0;
int i,j,l,x;
在这里,我按原样显示结构,尚未排序。
for( x = 0; x < 5; x++ )
{
printf("\nStruct desordenada:");
printf("\nPlaca: %s", car[q].placa);
printf("\nMarca: %s", car[q].marca);
printf("\nModelo: %s", car[q].modelo);
printf("\nAno: %s", car[q].ano);
printf("\nValor da diaria: R$%s", car[q].valordiaria);
}
这是我的冒泡排序结构,这就是我遇到的问题
// :::BUBBLESORT::: //
for (j = 0; j < 5 - 1; j++)
{
for (i = 0; i < 5 - 1; i++)
{
if ( strcmp(car[i].placa, car[i + 1].placa ) > 0)
{
temp = car[i];
car[i] = car[i+1];
car[i+1] = temp;
}
}
}
在这里,我展示了所有订购的结构
for( x = 0; x < 5; x++ )
{
printf("\nStruct Ordenana:");
printf("\nPlaca: %s", car[q].placa);
printf("\nMarca: %s", car[q].marca);
printf("\nModelo: %s", car[q].modelo);
printf("\nAno: %s", car[q].ano);
printf("\nValor da diaria: R$%s", car[q].valordiaria);
}
}
这是代码本身:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct carro
{
char placa[50];
char marca[50];
char modelo[50];
char ano[50];
char valordiaria[50];
};
int main()
{
struct carro car[5];
struct carro temp[5];
strcpy(car[0].placa, "IZA-2929");
strcpy(car[1].placa, "HJZ-1234");
strcpy(car[2].placa, "XCV-3478");
strcpy(car[3].placa, "BSD-8329");
strcpy(car[4].placa, "AHG-8332");
strcpy(car[0].marca, "Chevrolet");
strcpy(car[1].marca, "Volkswagen");
strcpy(car[2].marca, "Ferrari");
strcpy(car[3].marca, "Nissan");
strcpy(car[4].marca, "Ford");
strcpy(car[0].modelo, "Onix");
strcpy(car[1].modelo, "Golf");
strcpy(car[2].modelo, "Enzo");
strcpy(car[3].modelo, "GTR");
strcpy(car[4].modelo, "Ka");
strcpy(car[0].ano, "2013");
strcpy(car[1].ano, "2008");
strcpy(car[2].ano, "2004");
strcpy(car[3].ano, "2017");
strcpy(car[4].ano, "2015");
strcpy(car[0].valordiaria, "45");
strcpy(car[1].valordiaria, "60");
strcpy(car[2].valordiaria, "80");
strcpy(car[3].valordiaria, "200");
strcpy(car[4].valordiaria, "65");
int q=0;
int i,j,x;
for( x = 0; x < 5; x++ )
{
printf("\nStruct desordenada:");
printf("\nPlaca: %s", car[q].placa);
printf("\nMarca: %s", car[q].marca);
printf("\nModelo: %s", car[q].modelo);
printf("\nAno: %s", car[q].ano);
printf("\nValor da diaria: R$%s", car[q].valordiaria);
}
// :::BUBBLESORT::: //
for (j = 0; j < 5 - 1; j++)
{
for (i = 0; i < 5 - 1; i++)
{
if ( strcmp(car[q].placa, car[q + 1].placa ) > 0)
{
temp = car[q];
car[q] = car[q+1];
car[q+1] = temp;
}
}
}
for( x = 0; x < 5; x++ )
{
printf("\nStruct Ordenada:");
printf("\nPlaca: %s", car[q].placa);
printf("\nMarca: %s", car[q].marca);
printf("\nModelo: %s", car[q].modelo);
printf("\nAno: %s", car[q].ano);
printf("\nValor da diaria: R$%s", car[q].valordiaria);
}
}
解决方案
您的打印循环中有一个“错字”,您在变量x上进行迭代,但在索引q上打印出来。
推荐阅读
- excel - 将多张表中的列数据复制到同一列中的一张表中,不覆盖
- javascript - 从数组中删除对象,其中一个键是重复的,另一个键比其他键少
- java - 检查点发生时,flink 广播状态不会保存到rocksdb?
- apache-spark - 我们可以将 Spark 的 CBO(基于成本的优化器)与原生 parquet 或内存数据帧结合使用吗?
- prolog - 如何使用 Prolog 解决运输问题?
- math - 两个快速移动的圆圈之间的碰撞解决方案。一种对碰撞没有反应的
- matlab - (MATLAB)如何获得一系列图像的最大和最小背景?
- bash - 如何使用 Xidel 从图像 @srcset 属性中获得图像的最佳分辨率?
- php - 将验证码添加到 formmail pro core.cgi
- css - 如何隐藏 asp:BoundField 与 css