首页 > 其他分享 >学习日记(qsort)

学习日记(qsort)

时间:2022-10-12 22:00:37浏览次数:81  
标签:const 指向 int void qsort 学习 日记 指针

1、C语言标准库函数 qsort(快速排序)
声明在stdlib.h文件中,时间复杂度为n*log(n)

void qsort( void *base(需要排序的目标数组名), size_t num(参与排序的目标数组元素个数), size_t width(单个元素的大小(或者目标数组中每一个元素长度),推荐使用sizeof(s[0])这样的表达式), int (__cdecl *compare (比较函数))

int compare (const void *elem1, const void *elem2 ) );(返回值必须是int,两个参数的类型必须都是const void *)

对int类型数组进行排序

int num[100];

int cmp ( const void *a , const void *b )

{

    return *(int *)a - *(int *)b;  //升序排序,在这句话里 a,b肯定是一个指针变量(int *)a是表示把a强制转换成一个int型的指针。如果以前a是char型,编译器会认为a指向的那一个字节的内存单元是a里面的东西把a转换成int型,编译器会认为a指向的连续四个字节里的东西都是a里面的。*(int *)a就是取a指向的内容的意思,跟*a的那个*作用一样

//return *(int *)b - *(int *)a; //降序排序

/*可见:参数列表是两个空指针,现在他要去指向你的数组元素。所以转型为你当前的类型,然后取值。

        升序排列时,若第一个参数指针指向的“值”大于第二个参数指针指向的“值”,则返回正;若第一个参数指针指向的“值”等于第二个参数指针指向的“值”,则返回零;若第一个参数指针指向的“值”小于第二个参数指针指向的“值”,则返回负。

        降序排列时,则刚好相反。

*/

}

qsort(s,n,sizeof(s[0]),cmp);

eg:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#pragma warning(suppress : 4996)//解决警告
int s[10000], n, i;
int cmp(const void* a, const void* b)
{
return(*(int*)b - *(int*)a); //实现的是降序排序
}
int main()
{

// 输入想要输入的数的个数
scanf_s("%d", &n);
for (i = 0; i < n; i++)
scanf_s("%d", &s[i]);//一个一行的输入要比较的数字
qsort(s, n, sizeof(s[0]), cmp);
for (i = 0; i < n; i++)
printf("%d ", s[i]);
return(0);
}

 

以上摘取总结自:qsort函数、sort函数 (精心整理篇) - JokerSmithWang - 博客园 (cnblogs.com)

 

2、

标签:const,指向,int,void,qsort,学习,日记,指针
From: https://www.cnblogs.com/zhishiyigenicheng/p/16786255.html

相关文章

  • 深度学习环境搭建
    (1) 安装Anaconda:建立Python应用环境安装成功界面如下:(2) VisualStudioCode:建立代码编辑环境1.安装Python扩展2.选择合适的Python解释器3.安装下列应用扩展......
  • 机器学习环境安装
    Mac下安装机器学习环境1.安装Anaconda:建立python应用环境访问https://repo.anaconda.com/archive/,选择.sh后缀pkg是可视化安装,sh是命令行方式安装。在terminal中执行......
  • 17组学习总结
    ​嵌套循环循环嵌套必须是包含关系,而且while、do…while、for循环都可以用循环嵌套,还可以相互嵌套。嵌套循环需要确保每层的循环关系.循环跳转语句  在switch条件......
  • 【每周CV论文推荐】 深度学习人脸检测入门必读文章
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。人脸图像是整个图像处理领域里......
  • 【NLP】 深度学习NLP开篇-循环神经网络(RNN)
    从这篇文章开始,有三AI-NLP专栏就要进入深度学习了。本文会介绍自然语言处理早期标志性的特征提取工具-循环神经网络(RNN)。首先,会介绍RNN提出的由来;然后,详细介绍RNN的模型结......
  • Java枚举类的学习
    packagejava1;/***@author高槐玉*#Description:*枚举类的使用*1,枚举类的理解:类的对象只有有限个,确定的。我们称此类为枚举类*2.当需要定义一姐常量时,强......
  • Retrofit学习笔记
    官网:https://square.github.io/retrofit/入门教程(入门、源码、设计模式):https://www.jianshu.com/p/8e6d16a982b8Retrofit简介Atype-safeHTTPclientforAndroid......
  • 深度学习第二课
    向文件写入数据问题1:将含有缺失值(NaN)最多的列删除。 利用   *.isna().sum()  来统计每列缺失值的个数,axis=0计算列,axis=1计算行再用data=data.drop(co......
  • 第一天学习
    MarkDown学习标题  字体Hello,World!Hello,World!Hello,World!Hello,World!Hello,World! 引用 分割线图片[  超链接点击跳转到狂神博客 列......
  • 【每周CV论文】深度学习文本检测与识别入门必读文章
    欢迎来到《每周CV论文推荐》。在这个专栏里,还是本着有三AI一贯的原则,专注于让大家能够系统性完成学习,所以我们推荐的文章也必定是同一主题的。文本检测和识别是计算机视觉的......