有没有更好的方法,对三个数排序,且可读性不能降低
#include <stdio.h>int main()
{
int a,b,c,t;
printf("请输入3个数,以逗号分隔:\n");
scanf("%d,%d,%d",&a,&b,&c);
if(a > b)
{
t = a;
a = b;
b = t;
}
if(a > c)
{
t = a;
a = c;
c = t;
}
if(b > c)
{
t = b;
b = c;
c = t;
}
printf("从小到大排列依次是:%d,%d,%d",a,b,c);
return 0;
} 我上面用了qsort这个现成的函数不知道行不行
不过不管是qsort还是现在这个sort,目的就是排序,只要能完成任务,不管用什么算法都可以
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int compar(const void *a, const void *b)
{
return *(const int *)a > *(const int *)b;
}
void sort(void *arr, size_t arr_size, size_t elem_size, int (*compar)(const void *a, const void *b))
{
void *buf = malloc(elem_size);
for(size_t i = 0; i < arr_size; ++i)
{
for(size_t j = i + 1; j < arr_size; ++j)
{
void *a = arr + i * elem_size;
void *b = arr + j * elem_size;
if(compar(a, b))
{
memcpy(buf, a, elem_size);
memcpy(a, b, elem_size);
memcpy(b, buf, elem_size);
}
}
}
free(buf);
}
void sort_3(int *a, int *b, int *c)
{
int arr = {*a, *b, *c};
//qsort(arr, 3, sizeof(int), compar);
sort(arr, 3, sizeof(int), compar);
*a = arr;
*b = arr;
*c = arr;
}
int main()
{
int a = 8, b = 2, c = 5;
sort_3(&a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
我不知道这样有没有降低可读性
#include <stdio.h>
#include <stdlib.h>
int compar(const void *a, const void *b)
{
return *(const int *)a > *(const int *)b;
}
void sort_3(int *a, int *b, int *c)
{
int arr = {*a, *b, *c};
qsort(arr, 3, sizeof(int), compar);
*a = arr;
*b = arr;
*c = arr;
}
int main()
{
int a = 8, b = 2, c = 5;
sort_3(&a, &b, &c);
printf("%d %d %d\n", a, b, c);
return 0;
}
页:
[1]