hi,
ich steh gerade etwas auf dem schlauch. ich versuche mein array zu
sortieren mit qsort abhängig von einem rtc timestamp. es soll
aufsteigend nach dem jüngsten datum sortiert werden also: z.b. time_1 =
10.05.2013 15:10:44 und time_2 = 10.05.2013 15:01:34 dann müsste
time_2 in das element [0] geschrieben werden und time_2 in element [1]
usw..
1 |
|
2 | typedef struct RTC_TYPE
|
3 | {
|
4 | uint8_t day;
|
5 | uint8_t month;
|
6 | uint16_t year;
|
7 | uint8_t hour;
|
8 | uint8_t min;
|
9 | uint8_t sec;
|
10 | }rtc_t;
|
11 |
|
12 | typedef struct TIME_TYPE
|
13 | {
|
14 | uint8_t id;
|
15 | rtc_t time_stamp;
|
16 | }time_t;
|
17 |
|
18 | time_t array[5];
|
19 |
|
20 |
|
21 | int rtc_cmp(const void* time_1, const void* time_2)
|
22 | {
|
23 | time_t *p1 = (time_t *) time_1;
|
24 | time_t *p2 = (time_t *) time_2;
|
25 |
|
26 | if(p1->time_stamp.year < p2->time_stamp.year)
|
27 | {
|
28 | return -1;
|
29 | }
|
30 | else if(p1->time_stamp.year > p2->time_stamp.year)
|
31 | {
|
32 | return 1;
|
33 | }
|
34 |
|
35 | if(p1->time_stamp.month < p2->time_stamp.month)
|
36 | {
|
37 | return -1;
|
38 | }
|
39 | else if(p1->time_stamp.month > p2->time_stamp.month)
|
40 | {
|
41 | return 1;
|
42 | }
|
43 |
|
44 | if(p1->time_stamp.day < p2->time_stamp.day)
|
45 | {
|
46 | return -1;
|
47 | }
|
48 | else if(p1->time_stamp.day > p2->time_stamp.day)
|
49 | {
|
50 | return 1;
|
51 | }
|
52 |
|
53 | if(p1->time_stamp.hour < p2->time_stamp.hour)
|
54 | {
|
55 | return -1;
|
56 | }
|
57 | else if(p1->time_stamp.hour > p2->time_stamp.hour)
|
58 | {
|
59 | return 1;
|
60 | }
|
61 |
|
62 | if(p1->time_stamp.min < p2->time_stamp.min)
|
63 | {
|
64 | return -1;
|
65 | }
|
66 | else if(p1->time_stamp.min > p2->time_stamp.min)
|
67 | {
|
68 | return 1;
|
69 | }
|
70 |
|
71 | if(p1->time_stamp.sec < p2->time_stamp.sec)
|
72 | {
|
73 | return -1;
|
74 | }
|
75 | else if(p1->time_stamp.sec > p2->time_stamp.sec)
|
76 | {
|
77 | return 1;
|
78 | }
|
79 |
|
80 | return 0;
|
81 | }
|
82 |
|
83 |
|
84 | int main(void)
|
85 | {
|
86 | //gehen wir mal davon aus das das array bereits mit verschiedenen timestamps befüllt wurde
|
87 | ....
|
88 | qsort(array, 5, sizeof(time_t), rtc_cmp);
|
89 |
|
90 | }
|
es wird sortiert jedoch vollkommen falsch und durcheinander, weiß jemand
wo ein fehler liegt? danke im voraus