用qsort排序

如何把qsort变成稳定排序 稳定排序(冒泡之类的),可以保证大小相同的元素再排序前后的相对位置不变,但是时间复杂度相对较高,写起来也比较麻烦,(特别是在不能使用本地文件的考试中)),而qsort是大家喜闻乐见的排序函数,我们只需要写一个cmp函数就行了,但是,唯一有点美中不足的是:qsort排序不稳定,这使得在某些问题时,普通的qsort就不能很好解决问题了,这时,我们可以通过结构体来使得qsort稳定。大家肯定能想到,这道题是要用结构体数组存每个人的信息的,然后对按名字的字典序排序qsort,但是注意题目里面这一段话。 阅读详情


冒泡,快排都是常见的排序方法,这里介绍用头文件中的qsort函数排序。不过自己要先一个cmp函数。

#include<stdlib.h>//qsort的头文件
int a[100]={0,2,4,1,5,7,3,8,9}; //要排序的数组
struct Person//要排序的结构体
{
	char num[20]; 
	char name[100];
	int score;
	int sum;
        double P;
}man[100];

1.给数组a[]排序

int cmp_1(const void *a,const void *b)//给数组a[]排序 
{
	return *(int *)a-*(int *)b;
}

//函数的调用
qsort(a,N,sizeof(a[0]),cmp_1);//N为数组的大小,这里为9
</pre>2.按结构体里的 score排<pre class="cpp" name="code">int cmp_2(const void *a,const void *b)//按结构体里的 score排 
{
	return ((Person *)a)->score-((Person *)b)->score;
}
//函数调用 
qsort(man,N,sizeof(man[0]),cmp_2);
</pre><pre class="cpp" name="code">3.按结构体里的P排序(注意是double型)
<pre class="cpp" name="code">int cmp(const void *a,const void *b)
{//从小到大排
  return ((Person *)a)->P>((Person *)b)->P?1:-1;
}


4.先按sum排,如果sum相等再按score排
int cmp_3(const void *a,const void *b)//先按sum排,如果sum相等再按score排 
{
      struct Person *c=(Person *)a;
	  struct Person *d=(Person *)b;
	  if(c->sum!=d->sum)
	  return c->sum-d->sum;
	  else
	  return c->score-d->score;
}
//函数调用 
qsort(man,N,sizeof(man[0]),cmp_3);
</pre><pre class="cpp" name="code">5.先按字符串num排,如果字符串num相同,再按字符串name排 
int cmp_4(const void *a,const void *b)//先按字符串num排,如果字符串num相同,再按字符串name排 
{
     struct Person *c=(Person *)a;
  struct Person *d=(Person *)b;
  if(strcmp(c->num,d->num)!=0)
  return strcmp(c->num,d->num);
  else
  strcmp(c->name,d->name);
}
//函数调用 
qsort(man,N,sizeof(man[0]),cmp_4); 
</pre><pre class="cpp" name="code">6.先按score排,如果score相同,再按字符串num排 
<pre class="cpp" name="code">int cmp_5(const void *a,const void *b)//先按score排,如果score相同,再按字符串num排 
{
      struct Person *c=(Person *)a;
	  struct Person *d=(Person *)b;
	  if(c->score!=d->score)
	  return c->score-d->score;
	  else
	  return strcmp(c->num,d->num);
}
//函数调用 
qsort(man,N,sizeof(man[0]),cmp_5); 




sortProject(Qt5中文排序与英文排序实现).zip Qt5自带QCollator和QLocale库,结合qSort()函数,在VS2015开发工具下实现排序,支持中文英文排序,其中中文按照首字母排序,也可以设置按找笔画排序 立即下载

相关推荐

双屏DPI缩放问题全解析:从原理到实战解决窗口大小突变

DPI(每英寸点数)缩放是现代操作系统在多显示器环境下实现界面适配的核心技术。其原理是通过虚拟分辨率映射,在不同物理像素密度的屏幕上维持一致的视觉尺寸。这项技术的价值在于解决了高分辨率屏幕显示内容过小的问题,保障了跨屏工作流的视觉连续性。然而,在混合DPI环境(如4K屏与1080p屏组合)中,显卡驱动逻辑与应用程序DPI感知的协同问题,常导致窗口跨屏时出现剧烈缩放、尺寸错乱。这直接影响多屏办公、设计协作等需要频繁拖拽窗口的应用场景。本文聚焦于**显卡驱动**配置与**应用程序兼容性**设置,提供一套从系统底

weixin_34364071的博客 386

C语言 快速排序——qsort函数详解

还在用冒泡排序吗!来试试万能的快速排序函数吧!

chara9885的博客 2万+

从零到一:树莓派OpenWrt squashfs固件扩容背后的文件系统魔法

本文深入解析树莓派OpenWrt系统中squashfs固件的扩容原理与操作。通过理解squashfs与overlayfs的协同机制,掌握分区调整和文件系统扩容技巧,解决存储空间限制问题,提升设备可用性。

hadoop5ranger的博客 1037

【C语言】qsort()函数详解:能给万物排序的神奇函数

有关qsort()函数的介绍及使用方法详解。同时仿照qsort()函数模拟实现自己的bubble_sort()函数.

C/C++领域,数据结构,linux,MySQl学习者 4万+

告别拼音!用VSCode+Dosbox-X搞定汇编语言课程设计里的中文姓名显示

本文详细介绍了如何利用VSCode和Dosbox-X解决汇编语言课程设计中中文姓名显示的问题。通过配置开发环境、理解GB2312编码及正确使用汇编指令,学生可以告别拼音显示,实现中文字符的正确输出。文章还提供了完整的代码示例和常见问题排查方法,帮助读者快速掌握这一实用技能。

weixin_30872337的博客 424

AgentScope Java 2.0 最佳实践:9 个完整示例手把手带你开发 Java‑Agent

本文基于9 个完整示例,深入剖析从基础对话(BasicChatExample)、工具调用(@Tool 注解)、结构化输出(POJO Schema)、ToolGroup 自主管理、MCP 外部工具集成、Hook 生命周期监控、Spring Boot SSE 流式 Web、JsonSession 会话持久化到中断恢复的全链路实战教程。

program哲学 1621

QT meeGo 中文字符串排序

<br /><br />本站所有文章由本站和原作者保留一切权力,仅在保留本版权信息、原文链接、原文作者的情况下允许转载,转载请勿删改原文内容, 并不得用于商业用途。 谢谢合作。原文链接:MeeGo 中文字符串排序<br /> <br />Qt类中的qSort()函数提供了对字符串的排序功能。要利用qSort为中文进行排序则需要我们提供一个针对中文比较规则的比较器。<br />Meego Touch Framework 中的MCollator实现了该功能。更准确地说是MCollator实现了所有国家语言的排序

hufeng825的专栏 1575

AIO-1126-JD4(RV1126)蓝牙通讯(BLE)

AIO-1126-JD4采用了正基科技推出的一款集成WiFi、蓝牙功能的模组AP6236,支持高速(HS)功能的蓝牙 4.0,集成了 1.5 类功率放大器(PA),并支持低功耗蓝牙(BLE)。提到正基就不得不提下博通。博通和正基是芯片技术与模块制造方面的合作关系,正基科技是中国台湾的公司,在无线通信模块领域有一定的市场份额,博通则是全球领先的有线和无线通信半导体公司。正基把包含博通关键IP的核心芯片和自家的射频部分等封装在一起,即SIP(System In Package)。

w1820020635的博客 1121

qsort 排序法

qsort排序法

weixin_53648727的博客 1122

python中有趣的库 freegames 的详细使用

freegames 是一个包含多个简单 Python 游戏的开源库,适合初学者学习 Python 编程和游戏开发。以下是 freegames 的详细介绍和用法示例。

数据知道的博客 3万+

PostgreSQL的学习心得和知识总结(八十二)|深入理解PostgreSQL数据库SQL语句的词法解析和语法解析流程

postgresql 词法解析语法解析流程

孤傲小二~阿沐的博客 5446

sort() 排序和qsort() 排序(超详细)

让我们来学习c语言的qsort()排序 和C++的sort()排序。

2302_81416927的博客 4897

chembl_webresource_client 包数据接口下载chembl数据库;ZINC数据库下载、simles获取

点击进去https://zinc.docking.org/subclasses/kinase/predictions/,然后下载sdf模式,这里可以转化simles格式,如果下载csv里面没有包含simles。参考:https://github.com/chembl/chembl_webresource_client/blob/master/demo_wrc.ipynb。参考:https://zinc.docking.org/这是网页搜索查看,16条数据。这个数据这下载特别慢。

weixin_42357472的博客 3046

关于qsort排序的一些心得

首先,排序的方法有很多。对于我们这些初学者来说,可以多懂一些、多学一些来懂一些其中的思想。其实只要完全融会贯通一个就够用了;我认为这个就是qsort排序,因为时间虽然比不上快排,但是计较稳定。其可以对数字,字母,结构体等等都可以排序。 1:数字的qsort排序 a:从大到小排序 #include  //头文件 int cmp ( const void *a , const

大神养成中..... 1万+

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

冒泡排序与qsort函数

qsort函数是库函数,可以直接使用。qsotr函数是一种快速排序的方法并且qsort函数可以排序任意类型的数据。上面介绍的排序方法存在一定问题,因为并不是所有的数据类型都能直接使用> <等比较符号来直接比较,而同时交换变量时到底创建什么类型的变量也是一个未知的问题,因此我们用到qsort函数。这是cplusplus.com官网给出的qsort函数的介绍我们来分析一下其参数以及返回类型。

L_142190687的博客 1299

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

qsort排序各种类型的数据

qsort是C语言标准库中的通用排序函数,采用快速排序算法,可对任意类型数据进行排序。其核心在于自定义比较函数:对于整型数组,直接比较元素值;浮点型需处理精度问题;字符串数组需用strcmp比较;结构体数组则指定字段排序。比较函数需返回负数、0或正数以表示元素相对大小。通过提供数组指针、元素个数、元素大小和比较函数,qsort可实现高效排序。该函数灵活性强,但需确保比较函数逻辑正确,否则会导致排序错误。

2503_92702355的博客 1335

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

qsort排序

qsort排序原文地址:qsort排序

wwwcomcn123的专栏 224

指针之qsort排序

qsort函数

2302_81707171的博客 897

qsort函数的使用以及模拟实现冒泡排序

qsort函数的使用和模拟实现

2402_87779153的博客 901

冒泡与 qsort 排序策略集

今天我们要学习两种排序方法,分别是冒泡排序和qsort函数排序,冒泡排序相对qsort函数排序要简单一点,更易于理解。

2302_79963723的博客 6075

qsort快速排序函数的模拟构建

看到嵌套的for循环里面的内容:通过另一个函数cmp_str来比较两个元素的大小进而判断要不要交换,重点是我们使用这个函数的时候实参的理解,我们将所有元素首先转换成char*的类型,在这里是为了兼容性(举个反例,假如你是int*类型的,但是你要排序一个结构体,但是这个结构体每个元素的大小都不是int的整数倍,那自然是不能传过去的),但是char*类型就不一样,当你解引用的时候可以乘上一个整数来确保大小和你要排序的元素大小相同,因为char大小是一个字节。要注意的是这里的MyType是你要排序的元素的类型;

zc331的博客 1916

Qsort对链表指针排序

数组元素为head头指针 头指针是结构体指针 排序方式: 链表元素少的排前面 元素个数相同的按字典序排序 #include <stdio.h> #include <stdlib.h> typedef struct TagNode{ int data; struct TagNode *next; }Node; Node *CreateLink(int *arr...

icesongqiang 2159

qsort用于结构体数组排序

用模拟的qsort进行解释结构体数组的排序 typedef struct Stu{ char name[100]; char sex[10]; }stu; void Swap(void *_x, void *_y,int size) { char *x = (char *)_x; char *y = (char *)_y; char temp = 0; while (size)//每次指针移动一个字节,将size(元素的带下)个字节全部交换 { temp = *x; *x = *y;

ych9527的博客 2429

qsort_qsort排序

该函数参数中,base 是待排序数组的起始地址,nelem 是待排序数组的元素个数,width 是待排序数组的每个元素的大小(以字节为单位),最后一个参数 pfCompare 是一个函数指针,它指向一个“比较函数”。答案是,qsort 函数在执行期间,会通过pfCompare指针调用一个 “比较函数”,用以判断两个元素哪个更应该排在前面。qsort 函数的用法规定,“比较函数”的原型应是:int 函数名(const void * elem1, const void * elem2);

2401_87556657的博客 299

高阶C语言|库函数qsort的使用以及用冒泡排序实现qsort的功能详解

在编程中,排序算法算是我们的老盆友了,但是你是否认识qsort的呢?在本文中,我们将深入探讨qsort函数的使用,并通过实现冒泡排序来模拟qsort的功能,比较两者的不同之处。qsort冒泡排序是一种简单的排序算法,它通过重复地遍历待排序的数组,比较每对相邻元素,并交换它们的位置,如果它们的顺序不正确。这个过程会持续进行,直到没有任何元素需要交换为止。虽然qsort和冒泡排序都能实现数组的排序功能,但它们各自的效率和适用场景差异显著。qsort。

Surplus886的博客 1739

【排序】什么都能排的C语言qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序

【排序】什么都能排C语言的qsort排序详解【超详细的宝藏级别教程】深度理解qsort排序。超级详细的宝藏教程,干货满满啊不要错过!不收藏必后悔系列

系统编程、网络编程 2476
上一篇: HDOJ 1879 继续畅通工程(并查集)
下一篇: hdoj 2206 IP的计算
SimonCoder
博客等级 码龄13年 1412粉丝 231原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值