当前位置: 首页 > news >正文

qsort实现数据排序

学习该库函数之前,先回顾一下冒泡排序

1.冒泡排序

#include<stdio.h>
void bubble_sort(int arr[], int sz)
{int i, j = 0;int flag = 1;for (i = 0; i < sz - 1; i++){for (j = 0; j < sz - 1 - i; j++){if (arr[j] > arr[j + 1]){int tmp = arr[j];arr[j] = arr[j + 1];arr[j + 1] = tmp;flag = 0;}}if (flag == 1){break;}}}int main()
{int arr[10] = { 1,3,5,7,9,8,6,4,2,10 };int sz = sizeof(arr) / sizeof(arr[0]);bubble_sort(arr, sz);int k = 0;for (k = 0; k < sz; k++){printf("%d ", arr[k]);}return 0;
}

运行结果:

2. qsort库函数排序

优点:相较于上面的冒泡排序,它可以排序任意类型的数据。

根据

由上可知:

该库函数4个参数中还包含了返回值类型为int的函数指针

#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* p1, const void* p2)
{if (*(int*)p1 > *(int*)p2)return 1;else if (*(int*)p1 == *(int*)p2)return 0;else return -1;}void test1()
{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()
{test1();return 0;
}

简化后:

#include<stdio.h>
#include<stdlib.h>int cmp_int(const void* p1, const void* p2)
{if (*(int*)p1 > *(int*)p2)return 1;else if (*(int*)p1 == *(int*)p2)return 0;else if (*(int*)p1 < *(int*)p2)return -1;
}int main()
{int arr[10] = { 1,3,5,7,9,8,6,4,2,10 };int sz = sizeof(arr) / sizeof(arr[0]);qsort(arr, sz, sizeof(arr[0]), cmp_int);int i = 0;for (i = 0; i < sz; i++){printf("%d ", arr[i]);}return 0;
}

运行结果:

http://www.dtcms.com/a/334617.html

相关文章:

  • cuda编程笔记(15)--使用 CUB 和 atomicAdd 实现 histogram
  • PMP-项目管理-十大知识领域:进度管理-制定时间表、优化活动顺序、控制进度
  • 进程替换:从 “改头换面” 到程序加载的底层逻辑
  • 【深度学习计算性能】05:多GPU训练
  • TypeScript快速入门
  • MCP 大模型的扩展坞
  • 洛谷P1595讲解(加强版)+错排讲解
  • php版的FormCreate使用注意事项
  • 基于单片机的防酒驾系统设计
  • NY243NY253美光固态闪存NY257NY260
  • 24. async await 原理是什么,会编译成什么
  • 惠普声卡驱动win10装机完成检测不到声卡
  • Three.js 材质系统深度解析
  • 云原生俱乐部-RH124知识点总结(1)
  • 【CV 目标检测】Fast RCNN模型①——与R-CNN区别
  • 解锁 AI 音乐魔法,三款音乐生成工具
  • 《P4180 [BJWC2010] 严格次小生成树》
  • 服务器配置开机自启动服务
  • 基于深度强化学习的多用途无人机路径优化研究
  • 软件需求管理过程详解
  • 缓存一致性协议(Cache Coherence Protocols)与 目录协议(Directory Protocols)简介
  • 二进制为什么使用记事本读取会出乱码
  • PHP域名授权系统网站源码_授权管理工单系统_精美UI_附教程
  • RK3568 NPU RKNN(一):概念理清
  • 从通用到专业:大模型训练的两条路与遗忘难题
  • 【原理】C# 字段、属性对比及其底层实现
  • 手机版碰一碰发视频系统批量剪辑功能开发,支持OEM贴牌
  • 编写和运行 Playbook
  • 31 HTB Union 机器 - 中等难度
  • Java设计模式之《工厂模式》