想到排序,大多数人第一个想到的都是冒泡排序,今天介绍一种函数,叫快速排序qsort函数,在讲这个函数之前,先将冒泡排序(数字)的代码给大家,如果想排序字符串,请大家使用strcmp函数即可

这是C语言对数字进行冒泡排序的代码,大家可以自行复制。

​
#include<stdio.h>
int main()
{int arr[10] = { 9,8,7,6,5,4,3,2,1,0 };//升序排列int i = 0, j = 0;for (i = 0; i < 10; i++){for (j = 0; j < 10 - 1 - i; j++){if (arr[j] > arr[j + 1]){int t = arr[j];arr[j] = arr[j + 1];arr[j + 1] = t;}}}for (i = 0; i < 10; i++){printf("%d ", arr[i]);}return 0;
}​

但是今天,我们的这个函数功能要强大的多,可以对任何类型的数据进行排序,给大家介绍一下

sqort函数,我们现在网站上搜索这个函数的原函数,这里推荐一个网站https://cplusplus.com/可以搜索C语言中的任何库函数的原型及其用法,不过这个网站是全英文版本的,用微软自带的浏览器即可进行翻译,我们先来看一下这个函数的原型

将代码复制下来,巧用并用回车键可以让我们更清晰的看到代码的构成

void qsort (void* base, size_t num,size_t size,int (*compar)(const void*,const void*));

我们可以看到,这个函数有四个参数

void*base------>这个指针指向的是要进行排序的第一个元素的地址,而这参数的数据类型定义为void的原因是可以接受不同类型的元素来进行计较,如int,float,double,char等

size_t num------>这个参数是一个有符号的整形,并接受需要参加排序的数据元素的个数

size_t size------->这个参数是一个有符号的整形,接受要进行比较的数据元素所占空间的大小,单位为字节,如要排序的数据元素的类型为int型,则传给size 4即可,有了这个参数,即使不知道数据元素的类型,也能进行数据元素的定位

int (*compar)(const void*,const void*))------->这个参数是一个函数指针,用来接收使用者自己编写的 ‘比较函数’ ,并且返回类型是int

(当第一个参数>第二个参数时,返回一个>0的数)

(当第一个参数<第二个参数时,返回一个<0的数)

(当第一个参数=第二个参数时,返回0)

比较函数的编写

所谓比较函数,就是进行数据元素比较大小的函数,相当于冒泡排序最里面的一步

int (*compar)(const void*,const void*);

先写这个函数的主体

用p1,p2接受传过来的要进行排序的数据元素的地址(不需要单独实现),且它的返回类型为int型

再进行函数的实现,假设要进行排序的数据元素是int型,则将函数设计成如图即可

注意:要先将p1 p2强制类型转化为int*再进行解引用,char类型的也相同

假设要进行排序的数据元素是char类型,将减法改为strcmp函数即可

将比较函数设计完成之后,即可直接用qsort函数进行快速排序,代码如下

#include<stdio.h>
#include<stdlib.h>int compar (const void* p1, const void* p2)//比较函数
{return *(int*)p1 - *(int*)p2;
}
int main()
{int arr[10] ={9,8,7,6,5,4,3,2,1,0};//升序排列int i = 0, j = 0;qsort(arr, 10, sizeof(arr[0]), compar);//快速排序for (i = 0; i < 10; i++)//打印排序后的数据{printf("%d ", arr[i]);}return 0;
}

欢迎点赞取代码,讨论C语言,也希望大佬指点

C语言-排序-快速排序-qsort<stdlib.h>相关推荐

  1. C语言排序函数——qsort

    C语言排序函数--qsort: qsort函数原型: void __cdecl qsort(void *_Base,size_t _NumOfElements,size_t _SizeOfElemen ...

  2. c语言qsort函数简介,C语言排序函数—qsort函数

    前言: 在一些编程题中经常需要你按照某个指标按照从小到大或从大到小输出一些数据,这时你可以自己写一个排序函数进行排序,但是其实C语言函数库中就有一个排序函数--qsort函数,使用它可以节省你单独写排 ...

  3. C语言之——快速排序qsort库函数的讲解

    qsort函数C语言编译器函数库自带的排序函数,也叫快速排序函数.之前我写过一篇关于冒泡排序的代码讲解,大家感兴趣的话可以先看一看我对于冒泡排序的讲解. 相比较于冒泡排序,快速排序可以用更加快捷的速度 ...

  4. C语言排序函数qsort( )

    关于c语言排序的问题,以前我都是用冒泡排序或者快速排序,知道这几天,在杭电上面打ACM的时候,才发现又一种排序的函数,就是qsort(): qsort()括号里面有4个参数 第一个参数是将要排序的数组 ...

  5. C语言排序算法(十种排序代码可跑

    C语言排序算法(十种排序代码可跑) 冒泡排序: 选择排序: 插入排序: 归并排序: 快速排序: 希尔排序: 堆排序: 计数排序: 桶排序: 基数排序: 以上就是所有代码,希望同学们好好学习!!! 冒泡 ...

  6. stdlib.h包含的函数

    输入样式:C语言模式:#include <stdlib.h> C++样式:#include <cstdlib> 1函数名称:calloc 函数原型: void calloc(u ...

  7. Ler(一) stdlib.h,stdio.h,string.h头文件

    一.定位不同 1.stdlib.h是standard library标准库头文件,定位在通用工具函数. 2.stdio.h是standard input&output标准输入输出头文件,定位在 ...

  8. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  9. C语言排序的方法(冒泡排序,qsort快速排序)

    文章目录 一.冒泡排序 二.qsort快速排序 三.qsort函数的模拟实现 一.冒泡排序 #include <stdio.h> void bubble_sort(int* arr,int ...

最新文章

  1. matlab画三维图
  2. 基本数据与引用数据类型参数传递
  3. C++ BUILDER 消息处理的深入探索
  4. OpenGL noperspective在窗口空间中线性插值的实例
  5. 如何设置 jqplot 图表插件的标题图例和直线
  6. react之虚拟DOM的两种创建方式
  7. Linux基础学习四:Linux常用的命令(非常详细)
  8. C++:内存分几个区
  9. 数字后端基本概念介绍<IO Buffer>
  10. linux怎么启动ibus框架,fedora13 gnu/linux下 重启启动ibus输入法框架
  11. 解决formview遍历控件的问题
  12. iOS开发 -- 发送JSON数据给服务器
  13. 如何理解java抽象类,我是如何理解Java抽象类和接口的
  14. 开始编译mysql文件_mysql编译安装(详细)(转载)
  15. R语言实现地理探测器的流程及代码
  16. dtft变换的性质_dtft(dtft和dft的关系区别)
  17. 互联网周刊:草根创业选择题
  18. QC DCP PD SCP FCP等充电协议
  19. 详解物理学四大神兽————芝诺的乌龟
  20. tweenmax笔记

热门文章

  1. 群晖NAS教程(十九)、利用Docker安装青龙面板(京东薅羊毛)
  2. SqlAlchemy使用
  3. 【Space Shoot Project】Game Controller
  4. Redis灵魂拷问:36题带你面试通关
  5. 数据预处理,PCA主成分分析
  6. php理财复利_PHP理财 复利 分红 拆分经营养成类游戏源码
  7. android view 绘制过程,深入理解Android中View绘制的三大流程
  8. 录屏王ApowerREC Mac版卸载后,如何彻底删除Apowersoft Audio Device声音设备?
  9. iOS仿QQ侧滑菜单、登录按钮动画、仿斗鱼直播APP、城市选择器、自动布局等源码...
  10. 用计算机打出文字怎么打,电脑怎么用搜狗输入法打出特殊字符|电脑用搜狗输入法打出特殊字符的方法...