c实现的快速排序算法的函数名为qsort().qsort()函数对数据对象数组进行排序,其ANSI原型为:
void qsort(void * base,size_t nmemb,size_t size,int (*compar)(const void *,const void *));
第一个参数为指向要排序的数组头部的指针。ANSIC允许将任何数据类型的指针转换为void类型指针,因而qsort()的第一个实际参数可以指向任何类型的数组。
第二个参数为需要排序的项目数量。函数原型将该值转换为size_t类型。
第三个参数为数组元素的数据大小。
第四个参数为指向函数的指针,被指向的函数用于确定排序顺序。如果第一个项目的值大于第二个项目的值,那么比较函数返回正数,等于,返回0,小于,返回负数。
#include<stdio.h>
#include<stdlib.h>
#define NUM 40
void fillarray(double ar[],int n);
void showarray(const double ar[],int n);
int mycomp(const void *p1,const void * p2);
int main()
{
double vals[NUM];
fillarray(vals,NUM);
puts("Random list: ");
showarray(vals,NUM);
qsort(vals,NUM,sizeof(double),mycomp);
puts("\nSorted list: ");
showarray(vals,NUM);
return 0;
}
void fillarray(double ar[],int n)
{
int index;
for(index=0;index<n;index++)
ar[index]=(double)rand()/((double)rand()/0.1);
}
void showarray(const double ar[],int n)
{
int index;
for(index=0;index<n;index++)
{
printf("%9.4f ",ar[index]);
if(index%6==5)
putchar('\n');
}
if(index % 6!=0)
putchar('\n');
}
int mycomp(const void * p1,const void * p2)
{
const double * a1=(const double *)p1;//需要使用指向double的指针访问值
const double * a2=(const double *)p2;
if(*a1<*a2)
return -1;
else if(*a1==*a2)
return 0;
else
return 1;
}