
Ordenar fechas struct tm
Publicado por Diego (150 intervenciones) el 10/07/2016 21:28:18
Buenas tardes, intento ordenar las fechas de menor a mayor. Pero no logro ver porqué falla la lógica.
estructura que debo utlizar:
funcion:
el concepto parecia bastante sencillo cuando lo plantee en mi pizarrón.
primero comparar los ordenes superiores, si hay coincidencia se baja de nivel y se repite la comparacion hasta llegar a segundos.
estructura que debo utlizar:
1
2
3
4
5
6
7
8
9
10
struct datos{
unsigned int tamanio;
unsigned int fecha_modificacion;
long long reservado1;
long long reservado2;
char *nombre;
char magic[4];
char version;
unsigned int entradas;
};
funcion:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
void OrdenarFechas(struct datos cabecera[], unsigned int tam)
{
unsigned int i, j;
struct datos menor;
struct tm time[tam];
time_t modificacion;
for (i = 0; i < tam; i++){
modificacion = cabecera[i].fecha_modificacion;
localtime_r(&modificacion, &time[i]);
}
for (j = 0; j < (tam - 1); j++){
for (i = j; i < (tam - 1); i++){
if (time[i + 1].tm_year < time[j].tm_year){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}else{
if((time[i + 1].tm_year = time[j].tm_year) &&
(time[i + 1].tm_mon < time[j].tm_mon)){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}else{
if((time[i + 1].tm_year = time[j].tm_year) &&
(time[i + 1].tm_mon = time[j].tm_mon) &&
(time[i + 1].tm_mday < time[j].tm_mday)){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}else{
if((time[i + 1].tm_year = time[j].tm_year) &&
(time[i + 1].tm_mon = time[j].tm_mon) &&
(time[i + 1].tm_mday = time[j].tm_mday) &&
(time[i + 1].tm_hour < time[j].tm_hour)){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}else{
if((time[i + 1].tm_year = time[j].tm_year) &&
(time[i + 1].tm_mon = time[j].tm_mon) &&
(time[i + 1].tm_mday = time[j].tm_mday) &&
(time[i + 1].tm_hour = time[j].tm_hour) &&
(time[i + 1].tm_min < time[j].tm_min)){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}else{
if((time[i + 1].tm_year = time[j].tm_year) &&
(time[i + 1].tm_mon = time[j].tm_mon) &&
(time[i + 1].tm_mday = time[j].tm_mday) &&
(time[i + 1].tm_hour = time[j].tm_hour) &&
(time[i + 1].tm_min < time[j].tm_min) &&
(time[i + 1].tm_sec < time[j].tm_sec)){
menor = cabecera[i + 1];
cabecera[i + 1] = cabecera[j];
cabecera[j] = menor;
}
}
}
}
}
}
}
}
}
el concepto parecia bastante sencillo cuando lo plantee en mi pizarrón.
primero comparar los ordenes superiores, si hay coincidencia se baja de nivel y se repite la comparacion hasta llegar a segundos.
Valora esta pregunta


0