排序qsort 使結(jié)構(gòu)體中按照某數(shù)據(jù)進行排序函數(shù)
頭文件:stdlib.h
qsort 的函數(shù)原型是
void qsort(voidbase,size_t num,size_t width,int(__cdeclcompare)(const void,const void));
各參數(shù):1 待排序數(shù)組首地址 2 數(shù)組中待排序元素數(shù)量 3 各元素的占用空間大小 4 指向函數(shù)的指針渔嚷,用于確定排序的順序
//第四個參數(shù):
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
上面是由小到大排序竟纳,return *(int *)b - *(int *)a; 為由大到小排序。
對一維數(shù)組的排序?qū)嵗◤男〉酱笈判颍? #include<stdio.h>
#include<stdlib.h>
int comp(const void*a,const void*b)
{
return *(int*)a-*(int*)b;
}
int main()
{
int arr[10]={12,23,3,4,25,765,87,543,32,78};
qsort(arr,10,sizeof(int),comp);
int i=0;
for(;i<10;i++)
{
printf("%d\t",arr[i]);
}
printf("\n");
return 0;
}
對一個二維數(shù)組進行排序:
例如:int a[1000][2] :qsort(a,1000,sizeof(int)*2,comp);
int comp(const void*a,const void*b)
{
return((int*)a)[0]-((int*)b)[0];
}
對字符串進行排序
int Comp(const void*p1,const void*p2)
{
return strcmp((char*)p2,(char*)p1);
}
int main()
{
char a[MAX1][MAX2];
qsort(a,lenth,sizeof(a[0]),Comp);
}//lenth為數(shù)組a的長度
按結(jié)構(gòu)體中某個關(guān)鍵字排序(對結(jié)構(gòu)體一級排序):
struct Node
{
double data;
int other;
}s[100];
int Comp(constvoid*p1,constvoid*p2)
{
return(*(Node*)p2).data>(*(Node*)p1).data?1:-1;
}
qsort(s,100,sizeof(s[0]),Comp);
按結(jié)構(gòu)體中多個關(guān)鍵字排序(對結(jié)構(gòu)體多級排序)[以二級為例]:
struct Node
{
int x;
int y;
}s[100];
//按照x從小到大排序轻局,當(dāng)x相等時按y從大到小排序
int Comp(const void*p1,const void*p2)
{
struct Node*c=(Node*)p1;
struct Node*d=(Node*)p2;
if(c->x!=d->x)
return c->x-d->x;
else
return d->y-c->y;
}
對結(jié)構(gòu)體中字符串進行排序:
struct Node
{
int data;
char str[100];
}s[100];
//按照結(jié)構(gòu)體中字符串str的字典序排序
int Comp(const void*p1,const void*p2)
{
return strcmp((*(Node*)p1).str,(*(Node*)p2).str);
}
qsort(s,100,sizeof(s[0]),Comp);