2011-04-29 8 views
0

다음 배열을 정렬하는 데 문제가 있습니다.2 개의 구조체 변수로 구조체 배열 정렬?

temp_var[].trade_datetemp_var[].trans_amount을 기반으로 temp_var[] 어레이를 어떻게 정렬합니까?

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(&a[j], &a[j-1]); 
    } 
} 

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

무엇이 질문입니까? 작성한 코드가 컴파일되지 않았거나 런타임 오류가 있습니까? – Puddingfox

+1

숙제입니까? 그렇다면, 그것을 표시해야합니다. – joce

+0

안녕 puddingfox, trade_date에 대한 정렬 있어요, 거기에 어떤 실수가있다. (20100608 같은 날짜) – jcrshankar

답변

0

첫 번째가 동일한 경우 두 번째 정렬 기준 만 확인하면됩니다. 이 방법으로 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(&a[j], &a[j-1]); 
} 
else if (first < 0) { 
    swap(&a[j], &a[j-1]); 
}