Сортировка массива структуры по двум структурным переменным?

#c #structure

#c #структура

Вопрос:

У меня возникли проблемы с сортировкой следующего массива.

Как мне отсортировать temp_var[] массив на основе temp_var[].trade_date и temp_var[].trans_amount ?

 typedef struct      
{
    char    trans_d                  [2],      
            trans_amount            [10], 
            trans_me                 [8],
            account                 [10], 
            trans                  [16],
            trade_date              [12],
            setnt_date              [12];
} what_if;

what_if  temp_var[100];

void swap(what_if *a, what_if *b)
{
    tmp = *a;
    *a = *b;
    *b = tmp;
}


void bubbleSort(what_if a[], int size)
{
    for (i=0; i<size-1; i  )
    {
        for (j=size-1; j>i; j--)  
            if (strcmp(a[j].trade_date , a[j-1].trade_date) < 0 )
                swap(amp;a[j], amp;a[j-1]);
    }
}

int main()
{
    //after read the structure values
    bubbleSort(temp_var,t_count);
}
  

Комментарии:

1. В чем ваш вопрос? Приведенный вами код не компилируется или содержит ошибки во время выполнения?

2. Это домашнее задание? Если да, вы должны указать это.

3. привет, puddingfox, он получил сортировку по trade_date, есть ли какая-либо ошибка, которую вы почувствовали там. (дата, подобная 20100608)

4. там я сортирую базу по одной структурной переменной, теперь мне нужно с двумя структурными переменными.

Ответ №1:

Вы просто проверяете 2-й критерий сортировки, если 1-й равен. Пожалуйста, проверьте, можно ли сравнить поле trans_amount таким образом. Код мог бы быть короче, моим намерением было продемонстрировать, как это работает.

 int first = strcmp(a[j].trade_date , a[j-1].trade_date);
 if ( first == 0 ) {
     if ( strcmp(a[j].trans_amount , a[j-1].trans_amount) < 0 )
         swap(amp;a[j], amp;a[j-1]);
 }
 else if ( first < 0 ) {
    swap(amp;a[j], amp;a[j-1]);
 }