1.qsort函数是一个库函数,使用时应包含头文件:#include <stdlib.h>。
2.qsort函数的使用方法为qsort(void* base,size_t num,size_t width,int(*compare)(const* void pa)(const* void pb) ),其实也就是qsort(被排序的数组,数组元素个数,每个元素的大小,用来排序的函数),括号中的函数是需要我们自己根据排序要求来定义两个元素的大小而设置的一个排序函数。
3.qsort函数的使用示例:
数组排序:
#include <stdio.h>
#include <stdlib.h>
//qosrt函数的使⽤者得实现⼀个⽐较函数
int int_cmp(const void * p1, const void * p2)
{
return (*( int *)p1 - *(int *) p2);
}
int main()
{
int arr[] = { 1, 3, 5, 7, 9, 2, 4, 6, 8, 0 };
int i = 0;
//qsort(arr, sizeof(arr) / sizeof(arr[0]), sizeof (int), int_cmp);
qsort(arr,10,4,int_cmp)
//for (i = 0; i< sizeof(arr) / sizeof(arr[0]); i++)
for(i=0;i<10;i++)
{
printf( "%d ", arr[i]);
}
printf("\n");
return 0;
}
上述是对10个整数型数组的排序,如果想要对10个字符的数组排序,则可以将int*变为char*,int变为char,将数字里的数字换位想要排序的字符就可以了,需要注意的是qsort的内容有所变化变为了qsort(arr,10,1,char_com)。
如果要对字符串排序:
#include<stdio.h>
#include<stdlib.h>
int char_cmp(const void* p1, const void* p2)//规定按首字母顺序排序
{
return (*( int *)p1 - *(int *) p2);
}
int main()
{
char arr1[5] = "abc";
char arr2[5] = "bcd";
char arr3[5] = "cdf";
char arr4[5] = "gnm";
char* arr[4] = { arr1,arr2,arr3,arr4 };//定义了一个指针数组来存放四个字符串数组的指针(数组名为数组第一个元素地址)
qsort(arr, 4, 4, char_cmp);//每个元素均为指针,指针大小为4字节
printf("%s %s %s %s", arr1,arr2,arr3,arr4);
}
如果想要对结构体进行排序:
#include<stdio.h>
#include<stdlib.h>
struct Stu //学⽣
{
char name[20];//名字
int age;//年龄
};
//假设按照年龄来⽐较
int cmp_stu_by_age(const void* e1, const void* e2)
{
return ((struct Stu*)e1)->age - ((struct Stu*)e2)->age;
}
//strcmp - 是库函数,是专⻔⽤来⽐较两个字符串的⼤⼩的
//假设按照名字来⽐较
int cmp_stu_by_name(const void* e1, const void* e2)
{
return strcmp(((struct Stu*)e1)->name, ((struct Stu*)e2)->name);
}
//按照年龄来排序
void test2()
{
struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_age);
}
//按照名字来排序
void test3()
{
struct Stu s[] = { {"zhangsan", 20}, {"lisi", 30}, {"wangwu", 15} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_by_name);
}
int main()
{
test2();
test3();
return 0;
}
以上就是我个人对于qsort函数一些的用法,有什么错误的地方都可以指出来哦。