Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台

C /C++库函数 之 qsort的用法

qsort 对 int 型的排序~~~

注意调用  和自定义compare

 

#include<stdio.h>
#include<stdlib.h> // 调用的库函数
int compare(const void *a,const void *b); //函数的定义:定义一个比较函数~~ 这是判断函数排序的方法
int main()
{
int i;
int a[10]={1,2,3,2,4,5,2,1,3,0};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
printf("%d ",a[i]); // 排序好后 关键是在于输出 可以从头输出 从尾输出
system("pause");
}

int compare(const void *a,const void *b)
{
return *(int *)a-*(int *)b; //这是有小到大的输出
}

// return *(int *)b-*(int *)a; 这是由大到小的输出

输出的结果是:

0 1 1 2 2 2 3 3 4 5

 

qsort 的函数原型是void __cdecl qsort ( void *base, size_t num, size_t width, int (__cdecl *comp)(const void *, const void* ) )
  其中base是排序的一个集合数组,num是这个数组元素的个数,width是一个元素的大小,comp是一个比较函数。
  比如:对一个长为1000的数组进行排序时,int a[1000]; 那么base应为a,num应为 1000,width应为 sizeof(int),comp函数随自己的命名。
  qsort(a,1000,sizeof(int ),comp);
  其中comp函数应写为:
  int comp(const void *a,const void *b)
  {
  return *(int *)a-*(int *)b;
   }

下面这是对float的 qsort的排序~~

    

 

#include<stdio.h>
#include<stdlib.h> 
int compare(const void *a,const void *b);  
int main()
{
int i,j;
float a[10]={1.1,2.1,3.2,1.4,2.9,4.2,5.3,2.2,1.7,3.2};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
{
printf("%f ",a[i]); 
}
printf("\n");

system("pause");
}

int compare(const void *a,const void *b)
{
return (*(float*)a-*(float*)b>0?1:-1);   //这是将浮点型转化为整形。 
}

 

 

// char 型的函数 排序

#include<stdio.h>
#include<stdlib.h> // 调用的库函数 qsort
#include<string.h> // 调用的库函数 strcmp
int compare(const void *a,const void *b); //函数的定义:定义一个比较函数~~ 这是判断函数排序的方法
int main()
{
int i,j;
char a[10]={'m','n','s','a','q','f','g','h','i','j'};
qsort(a,10,sizeof(a[1]),compare);
for(i=0;i<=9;i++)
{
printf("%c ",a[i]); // 排序好后 关键是在于输出 可以从头输出 从尾输出
}
printf("\n");

system("pause");
}

int compare(const void *a,const void *b)
{
return strcmp((char*)a,(char*)b);
}

posted @ 2012-05-15 16:09  大嘴鸟  阅读(311)  评论(0编辑  收藏  举报
Mastermate官网 香港|英国|新加坡|澳大利亚|澳门|深圳硕士研究生申请平台