2013-02-12 29 views
1

升序排行做得很好。但是当我输入一个不同于一个的数字时,它应该调用降序,我认为这是很明确的。然而我有一个随机排序..降序无法正常工作c编程

#include<stdio.h> 

void sort(int b[], int size, int (*upordown)(int a, int b)); 
void swap(int *elt1, int *elt2); 
int ascending(int a, int b); 
int descending(int a, int b); 
main() 
{ 
int size =8; 
int order,a[size],i; 
fprintf(stdout, "please enter a sequence of numbers you wish to sort:\n"); 
for(i =0; i<size; i++) 
{ 
    scanf("%d", &a[i]); 
} 
printf("\n please enter 1 for ascending order or 2 for descending order"); 
scanf("%d", &order); 
if(order == 1) 
{ 
    sort(a, size, ascending); 
} 
else 
{ 
    sort(a, size, descending); 
} 
printf("Here is the new re arranged array: \n"); 
for(i =0; i<size; i++) 
{ 
    printf("%d\t", a[i]); 
} 
printf("\n"); 
return 0; 
} 

void sort(int b[], int size, int (*upordown)(int a, int b)) 
{ 
int pass, j; 
for(pass =0; pass< size;pass++) 
{ 
    for(j=0; j<size; j++) 
    { 
     if((*upordown)(b[j], b[j+1])) 
     { 
      swap(&b[j], &b[j+1]); 
     } 
    } 
} 

} 

void swap(int *elt1, int *elt2) 
{ 
int hold; 
if(*elt1 > *elt2) 
{ 
    hold = *elt1; 
    *elt1 = *elt2; 
    *elt2 = hold; 
} 

} 

int ascending(int a, int b) 
{ 
return b<a; 
} 
int descending(int a, int b) 
{ 
return b>a; 
} 
+1

你有额外的> check in'swap',这可能是不必要的 – congusbongus 2013-02-12 06:06:45

回答

2

这是因为你的交换功能是不正确的。它应该简单地交换其传递的参数:

void swap(int *elt1, int *elt2) 
{ 
    int hold; 
    hold = *elt1; 
    *elt1 = *elt2; 
    *elt2 = hold; 
} 

它不应该包含比较。