库函数 qsort 的用法
用法 库函数 qsort
2023-09-11 14:20:20 时间
qsort是一个库函数
基于快速排序算法实现的一个排序的函数
语法
void qsort(
void *base,
size_t number,
size_t width,
int(*cmp)( const void* e1 , const void* *e2)
);
参数
base
目标数组的函数。
number
元素中的数组大小。
width
元素大小(字节)。
cmp
指向用户提供的例程的指针比较两个数组元素,并返回指定它们关系的值。
注解
qsort
在排序过程中一次或多次调用cmp
例程,并将指针传递给每个调用中的两个数组元素。 如果cmp
表示两个元素相同,则它们在生成的排序数组中的顺序是数组按比较函数中定义的升序进行排序。 若要以降序对数组进行排序,请反转比较函数中的“大于”和“小于”的意义,即 e1和e2调换
比较函数返回值 | 说明 |
---|---|
<0 | e1<e2 |
0 | e1=e2 |
>0 | e1>e2 |
规定
头文件 <stdlib.h>
示例
1,模仿qsort的功能实现一个通用的冒泡排序
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
void print_arr(int arr[], int sz)
{
int i = 0;
for (i = 0; i < sz; i++)
{
printf("%d ", arr[i]);
}
}
int cmp_int(const void* e1, const void* e2)
{
return (*(int*)e1 - *(int*)e2);
}
void test2()
{
int arr[] = { 9,8,7,6,5,4,3,2,1,0 };
//排序为升序
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_int);
print_arr(arr, sz);
}
int main()
{
test2();
return 0;
}
void qsort(void* base,
size_t num,
size_t width,
int(*cmp)(const void* e1, const void* e2)
);
2.使用库函数,qsort排序各种类型的数据
#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
struct stu
{
char name[20];
int age;
double score;
};
//int cmp_stu_by_age(const void* e1, const void* e2)
//{
// return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
//}
int cmp_stu_by_name(const void* e1, const void* e2)
{
return strcmp( ((struct stu*)e1)->name , ((struct stu*)e2)->name );
}
void test3()
{
struct stu arr[3] = { {"zhangsan",20,55.5},{"lisi",30,88.0},{"zhaowu",10,90.0} };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_stu_by_name);
}
void swap(char* buf1, char* buf2, int width)
{
int i = 0;
for (i = 0; i < width; i++)
{
char tmp = *buf1;
*buf1 = *buf2;
*buf2 = tmp;
buf1++;
buf2++;
}
}
int main()
{
test3();
return 0;
}
void qsort(void* base,
size_t num,
size_t width,
int(*cmp)(const void* e1, const void* e2)
);
相关文章
- WebView的一些简单用法
- Hibernate的Restrictions用法
- Python import用法以及与from...import的区别
- servlet 用法
- rxjs里debounceTime operators的用法
- axios 里post和get的用法
- C# MessageBox用法实例 (附效果图)
- c语言编程小技巧-if空语句用法
- Java RandomAccessFile用法
- pyspark dataframe基本用法
- I2c驱动i2c_master_send()和i2c_master_recv()用法
- Castle DynamicProxy基本用法(AOP)
- torch 的 unsqueeze用法
- whois命令常见用法