当前位置: 代码迷 >> 综合 >> qsort (快排函数)
  详细解决方案

qsort (快排函数)

热度:3   发布时间:2023-12-04 12:14:52.0

目录

1.简介

2.解析

声明

参数

3.示例

4.总结

5.更新日志


1.简介

qsort函数是C语言编译器自带的排序函数
头文件  #include <stdlib.h>

功能:排序

不返回任何值

2.解析
 

声明


void qsort(void * base,size_t num,size_t width,int(*compar)(const void *p1 ,const void *p2 ))

参数

base       指针,指向要排序数组的第一个元素

求法:   ①数组名(此时表示首元素的地址)

num        base指向的数组中元素的个数

求法:   ①直接传表示元素个数的变量/常量

              ② sizeof(array)/sizeof(array[0])      (数组大小除以首元素的大小)

width      数组中每个元素的大小(以字节为单位)

求法:   ①直接传表示元素大小的常量

              ② sizeof(char)、sizeof(int).....

           

compar   用来比较两个元素的函数,即函数指针(回调函数)

函数声明    int(*compar)(const void *p1 ,const void *p2 )

参数    两个形参的类型必须是 const void *

说明:

传入的实参也为const void *  ,在函数内部执行的时候,会将const void * 转换为实际所需要的类型

compar函数的返回值大小 描述
compar返回值小于0 p1所指向的元素会排在p2指向的元素左边
compar返回值等于0 p1所指向的元素与p2指向的元素顺序不确定
compar返回值大于0 p1所指向的元素会排在p2指向的元素右边

例如:从小到大排序

int compar(const void* a,const void* b)
{return *(int*)a-*(int*)b;
}

若从大到小 则 return *(int*)b-*(int*)a;

3.示例

①对一维数组排序

#include <stdio.h>    //对一维数组进行排序
#include <stdlib.h>int compar(const void* x, const void* y)
{return *(int*)x - *(int*)y;          //从小到大排序
}int main()
{int i, Num;int* array;    scanf("%d", &Num);    //输入元素个数array = (int*)malloc(Num * sizeof(int));   //为元素开辟空间for (i = 0; i < Num; i++)scanf("%d", (array + i));   //输入元素qsort(array, Num, sizeof(int), compar);   //调用快排函数for (i = 0; i < Num; i++)printf("%d ", array[i]);free(array);return 0;
}

②二维数组

qsort(a,1000,sizeof(int)*2,comp);int compar(const void*a,const void*b){return((int*)a)[0]-((int*)b)[0];
}

③字符串

int compar(const void*p1,const void*p2)
{return strcmp((char*)p2,(char*)p1);
}

④结构体

4.总结

qsort函数还是挺经常用的,希望能够尽快熟练掌握

5.更新日志

2022.3.21 整理