因为你输出的顺序是a,b,c,d,而比较交换的策略是,如果前面的值小于后面的值就交换两个变量的值(前面变量的值大则不交换),所以就是大的在前,小的在后了。
并没有从小到大啊?
你可以利用 C 标准库 stdlib.h 里的 qsort( ) 完成任何类型的数组的快速排序:
#include
#include
int compare( const int *a, const int *b ) { return *b - *a; }
int main( ) {
int ia[ 4 ],
width = sizeof *ia,
num = sizeof ia / width,
j;
puts( "Enter four integers to be sorted in descending order:" );
for( j = 0; j < num; ++j )
scanf( "%d", &ia[ j ] );
qsort( ia, num, width, compare );
for( j = 0; j < num; ++j )
printf( "%d ", ia[ j ] );
}
调用 qsort( ) 只需要传入四个参数:
1)数组指针:指向要排序的数组
2)数组的元素个数
3)数组的元素字节长度
4)函数指针:指向我们定义的一个比较两个元素大小的函数
若是要 qsort( ) 做由小到大的排序,我们定义的函数的返回值和相应的条件必须是:
返回值 条件
====== =====
< 0 *a < *b
0 *a == *b
> 0 *a > *b
要达到以上的要求其实就只需写 “*a - *b” 。
而若是要 qsort( ) 做由大到小的排序,把 *a 和 *b 的位置换一换就行了。