我们在使用冒泡排序法做题的时候,经常会遇到运算次数过多程序超时的情况,而且冒泡排序法只能对整形数组进行排序。
为了解决这些问题!就使用qsort函数吧!
1.使用方法
1. 首先qsort函数是库函数,使用前应包含对应头文件#include<stdlib.h> 2.qsort函数的函数声明: int qsort(void* base,size_t num,size_t width,int(*compare)(const *void e1)(const *void e2))
其中,void* base是需排列的数组,size_t num是数组长度,size_t width是单个数组元素大小(字节),int(*compare)(const *void e1)(const *void e2)则是判断元素大小的依据函数。 看不懂没关系,由于是C初阶,会使用即可
使用:qsort(需要被排序的数组,数组元素个数,每个元素大小,排序函数名)
大致使用模版如下:
---------------------------------------------------------------------------------------------------------------------------------
int compare(const void* p1, const void* p2) //
{
return p1 - p2;
return p2 - p1;
//返回类型(正:调换前后元素,负:不变)
//注:p1和p2的类型根据实际情况写
}
int main()
{
int arr[] = { 5,2,3,1,8,9,2,0,3,5 };
int sz = sizeof(arr) / sizeof(arr[0]);//计算数组元素个数 40 / 4 = 10
qsort(arr, sz, sizeof(arr[0]), compare);
//arr - 指向要排序的数组的第一个元素的指针。
//sz - 由 arr 指向的数组中元素的个数
//sizeof(arr[0]) - 数组中每个元素的大小,以字节为单位。
//compar - 用来比较两个元素的函数。
return 0;
}
---------------------------------------------------------------------------------------------------------------------------------
实际解决问题:
整形数组排列: --------------------------------------------------------------------------------------------------------------------------------
#include<stdio.h> #include<stdlib.h>
int cmp_int_arr(const void*p1,const void*p2) {
return *((int*)p1) - *((int*)p2);
} int main()
{
int arr1[] = { 1,5,6,5,8,8,8,1,2,2,5,4 };
int sz1 = sizeof(arr1) / sizeof(arr1[0]);
qsort(arr1, sz1, sizeof(arr1[0]), cmp_int_arr);
for (int i = 0; i < sz1;i++) {
printf("%d ", arr1[i]);
} return 0;}
--------------------------------------------------------------------------------------------------------------------------------