Короче есть структура данных: "Название,начало,конец,вид,сложность,время" : Солнечный,Самара,Москва,водный,4,29 Южный,Саратов,Адлер,горный,3,23 Северный,Саратов,Саратов,пеший,1,13 Западный,Саратов,Тольятти,водный,2,5 Восточный,Саратов,Париж,пеший,5,50 Июльский,Саратов,Тольятти,водный,3,30 Нужно упорядочить данные во виду и времени. Как это сделать?
for (int i = 1; i < arr_size; i++) { for (int j = 0; j < arr_size - i; j++) { if (arr[j].time > arr[j+1].time){ t_struc temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for (int i = 1; i < arr_size; i++) { for (int j = 0; j < arr_size - i; j++) { if (strcmp(arr[j].type, arr[j+1].type) > 0){ t_struc temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } C for (int i = 1; i < arr_size; i++) { for (int j = 0; j < arr_size - i; j++) { if (arr[j].time > arr[j+1].time){ t_struc temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } for (int i = 1; i < arr_size; i++) { for (int j = 0; j < arr_size - i; j++) { if (strcmp(arr[j].type, arr[j+1].type) > 0){ t_struc temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } }
/*Короче есть структура данных: "Название,начало,конец,вид,сложность,время" Нужно упорядочить данные во виду и времени. Как это сделать? */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char * mname; char * mbegin; char * mend; char * mkind; unsigned int mcomplicacy; unsigned int mtime; } mydata; int compare( const void *arg1, const void *arg2 ); void print_struct(mydata data[], int n); int main() { mydata mdata[6] = {{"name1","begin1", "end1", "kind3",5,44}, {"bgd", "NewYork","end2", "kind2",0,4 }, {"name3","begin3", "Alabama","kind3",9,24}, {"name4","begin4", "Rome", "kind2",2,94}, {"name6","begin6", "tertt", "kind6",6,5}, {"name5","begin5", "end5", "kind3",7,14} }; int size = sizeof(mdata) / sizeof(mdata[0]); printf("size = %d\n",size); print_struct(mdata,6); printf("\n---------------------\n"); /* Sort remaining args using Quicksort algorithm: */ qsort( (void *)mdata, (size_t)size, sizeof( mdata[0] ), compare ); print_struct(mdata,6); return 0; } void print_struct(mydata data[], int n) { for (int i = 0; i < n; i++) printf("%s,%s,%s,%s,%d,%d\n", data[i].mname,data[i].mbegin,data[i].mend,data[i].mkind,data[i].mcomplicacy,data[i].mtime); } int compare( const void *v1, const void *v2 ) { const mydata *p1 = (mydata *)v1; const mydata *p2 = (mydata *)v2; int rc; if ((rc = strcmp(p1->mkind, p2->mkind)) < 0) //(p1->mkind < p2->mkind) return -1; else if (rc > 0) return +1; else if (p1->mtime > p2->mtime) return -1; else if (p1->mtime < p1->mtime) return +1; else return 0; } C /*Короче есть структура данных: "Название,начало,конец,вид,сложность,время" Нужно упорядочить данные во виду и времени. Как это сделать? */ #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct { char * mname; char * mbegin; char * mend; char * mkind; unsigned int mcomplicacy; unsigned int mtime; } mydata; int compare( const void *arg1, const void *arg2 ); void print_struct(mydata data[], int n); int main() { mydata mdata[6] = {{"name1","begin1", "end1", "kind3",5,44}, {"bgd", "NewYork","end2", "kind2",0,4 }, {"name3","begin3", "Alabama","kind3",9,24}, {"name4","begin4", "Rome", "kind2",2,94}, {"name6","begin6", "tertt", "kind6",6,5}, {"name5","begin5", "end5", "kind3",7,14} }; int size = sizeof(mdata) / sizeof(mdata[0]); printf("size = %d\n",size); print_struct(mdata,6); printf("\n---------------------\n"); /* Sort remaining args using Quicksort algorithm: */ qsort( (void *)mdata, (size_t)size, sizeof( mdata[0] ), compare ); print_struct(mdata,6); return 0; } void print_struct(mydata data[], int n) { for (int i = 0; i < n; i++) printf("%s,%s,%s,%s,%d,%d\n", data[i].mname,data[i].mbegin,data[i].mend,data[i].mkind,data[i].mcomplicacy,data[i].mtime); } int compare( const void *v1, const void *v2 ) { const mydata *p1 = (mydata *)v1; const mydata *p2 = (mydata *)v2; int rc; if ((rc = strcmp(p1->mkind, p2->mkind)) < 0) //(p1->mkind < p2->mkind) return -1; else if (rc > 0) return +1; else if (p1->mtime > p2->mtime) return -1; else if (p1->mtime < p1->mtime) return +1; else return 0; }