C语言——快速排序——qsort函数

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函数一些的用法,有什么错误的地方都可以指出来哦。

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

泪目啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值