C++中的qsort、sort排序

2023-05-16

注意:

int、char、string之类的是可以之间使用>,<,==之类的进行判断,char*类型的使用strcmp就行了

而struct与vector都可以当做数组进行处理,cmp函数传递值的类型,是数组中单个元素类型所决定的。不同的是vector向量

的起始迭代位置是使用a.begin()来表示,同时也可以使用a.begin()+k,来调整迭代指针的位置

  • 使用qsort对数组进行排序(int、char、char*、struct等等)

定义qsort中的cmp函数  
//返回-1表示不需要进行交换,返回1表示需要进行交换 
//传递的参数是const void*,需要在函数体内部进行强制类型转换后,在进行返回值的判定
int cmp(const void *a,const void *b)
{
	Student *a1,*b1;
	a1 = (Student*)a;
	b1 = (Student*)b;
	if( a1->data!=b1->data ){
		return a1->data<b1->data?-1:1;//由小到大进行排序
	}else{
		return a1->number<b1->number?-1:1;  
	} 
}

调用qsort
//必须包含头文件
#include<stdlib.h>
//参数s,表示等待排序的数组的起始位置,s表示从s[0]开始,s+k表示从s[k]开始
//参数5,表示从起始位置开始,连续多少个元素参与排序
//参数sizof(Student),表示参与排序的单个元素的内存空间大小
//参数cmp,表示qsort中的cmp函数
qsort(s,5,sizeof(Student),cmp);

实例代码: 

#include<stdio.h>
#include<stdlib.h>

struct Student{
	int data;
	int number;
}s[20];

int cmp(const void *a,const void *b)//返回-1表示不需要进行交换,返回1表示需要进行交换 
{
	Student *a1,*b1;
	a1 = (Student*)a;
	b1 = (Student*)b;
	if( a1->data!=b1->data ){
		return a1->data<b1->data?-1:1;  
	}else{
		return a1->number<b1->number?-1:1;  
	} 
}

int main()
{
	for(int i=0; i<5; i++){
		scanf("%d %d",&s[i].data,&s[i].number);
	}
	
	qsort(s,5,sizeof(Student),cmp);
	
	printf("排序后:\n");
	for(int i=0; i<5; i++){
		printf("%d %d\n",s[i].data,s[i].number);
	}
	return 0;
}
  • 使用sort

定义sort中的cmp函数  
//返回true表示不需要进行交换,返回false表示需要进行交换 
//传递的参数是type,比如int,float,Student
bool cmp(Student a,Student b)
{
	if( a.data==b.data ){
		return a.number<b.number; //number由小到大返回true,不用进行交换
	}else{
		return a.data<b.data;  //data由小到大返回true,不用进行交换
	} 
}

调用sort
//必须包含头文件
#include<algorithm>
//必须包含
using namspace std;
//参数s,表示等待排序的数组的起始位置,s表示从s[0]开始,s+k表示从s[k]开始
//参数s+6,表示从s[0]位置开始,连续6个元素参与排序
//参数cmp,表示qsort中的cmp函数
sort(s,s+6,cmp);

实例代码: 

#include<stdio.h>
#include<algorithm>
using namespace std;

struct Student{
	int data;
	int number;
}s[20];

bool cmp(Student a,Student b)
{
	if( a.data==b.data ){
		return a.number<b.number; //number由小到大返回true,不用进行交换
	}else{
		return a.data<b.data;  //data由小到大返回true,不用进行交换
	} 
}

int main()
{
	for(int i=0; i<6; i++){
		scanf("%d %d",&s[i].data,&s[i].number);
	}
	
	sort(s,s+6,cmp);
	
	printf("排序后:\n");
	for(int i=0; i<6; i++){
		printf("%d %d\n",s[i].data,s[i].number);
	}
	return 0;
}

sort对vector进行排序

#include <algorithm>
#include <vector>

vector<int> vec;
//比较函数,这里的元素类型要与vector存储的类型一致
bool compare(int a,int b)
{
  return a<b; //升序排列
}

std::sort(vec.begin(),vec.end(),compare);

至于,vector内部究竟是什么数据类型,也会决定compare内部的排序

另外,若不自定义比较函数,默认是按照升序排序。

 

 

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++中的qsort、sort排序 的相关文章

  • STL list remove和sort函数

    include lt iostream gt include lt list gt include lt iterator gt using namespace std bool cmp int a int b return a gt b
  • BoT-SORT: Robust Associations Multi-Pedestrian Tracking

    BoT SORT Robust Associations Multi Pedestrian Tracking 论文 xff1a arxiv code github 数据 xff1a 还未找到 文章贡献 运动相机的补偿和卡尔曼状态向量的选择I
  • python中sort和sorted的高级排序技巧

    Python list内置sort 方法用来排序 xff0c 也可以用python内置的全局sorted 方法来对可迭代的序列排序生成新的序列 1 排序基础 简单的升序排序是非常容易的 只需要调用sorted 方法 它返回一个新的list
  • Darknet-Deep_sort_pytorch 无人机跟踪识别记录

    创建数据集 使用labelme 构造voc数据集格式 转换txt为xml 开始训练 span class token function sudo span span class token function nohup span darkn
  • STL list remove和sort函数

    include lt iostream gt include lt list gt include lt iterator gt using namespace std bool cmp int a int b return a gt b
  • java中数组排序Arrays.sort(arr)

    import java util 选择排序 class SwitchTest public static void main String args int arr 61 3 5 6 23 45 2 排序前 printArray arr 排
  • Arrays.sort()的用法

    一 介绍 1 sort T a 的使用2 sort T a int formIndex int toIndex 的使用3 sort T a Comparator lt supre T gt c 的使用补充 xff1a sort T a Co
  • javascript中的sort()方法

    现在在学习javascript中 xff0c 发现sort 函数是有点奇怪的东西 xff08 可能是本人水平的问题 xff01 xff09 xff0c 于是就在这里记录一下自己找到的东西吧 sort 这个方法的参数很奇怪 xff0c 必须是
  • 信息学奥赛一本通 1176:谁考了第k名

    题目链接 http ybt ssoier cn 8088 problem show php pid 1176 include
  • 简单分析 C 语言的 qsort() 源码

    简单分析 C 语言的 qsort 源码 stdlib h 是使用 C 语言需要引入的库 在系统文件下可以搜索到这个文件夹 在里面可以看到有一个 qsort 文件用编译器或者记事本打开就能看到里面的源码了 单从文件名看 qsort 采用的是快
  • 【Shell牛客刷题系列】SHELL9 统计每个单词出现的个数:一起学习sort排序命令和uniq去重命令

    该系列是基于牛客Shell题库 针对具体题目进行查漏补缺 学习相应的命令 刷题链接 牛客题霸 Shell篇 该系列文章都放到专栏下 专栏链接为 专栏 Linux 欢迎关注专栏 本文知识预告 首先学习了对文件内容进行排序的sort命令和去除文
  • C++ sort函数自定义排序规则

    在使用vector容器时经常要进行排序 使用排序函数sort非常方便 但是之前都是简单调用sort v begin v end 没有自定义排序规则使用sort函数的额第三个参数 下面对sort总一个简单总结 头文件 include
  • js 对数组对象进行排序

    let listData id 1 name 测试1 presenttime 1557883600000 id 2 name 测试2 presenttime 1580751813000 id 3 presenttime 1561448381
  • stdlib的qsort是递归的吗?

    我读过qsort只是一种通用排序 不承诺实施 我不知道库在不同平台上有何不同 但假设 Mac OS X 和 Linux 实现大致相似 are the qsort递归实现和 或需要大量堆栈 我有一个大数组 数十万个元素 我想对它进行排序 而不
  • 需要帮助将 qsort 与结构数组一起使用

    现在 我看到了各种例子 但我不明白它们的意思 这是我的结构 typedef struct profile char gender 1 double soc PROFILE 其中 soc 是我要排序的社会安全号码 我知道你需要一个比较函数 但
  • 如何从 stdlib 编写 qsort 的比较函数?

    我有一个结构 struct pkt double x double y double alfa double r kw typedef struct pkt pkt 这些结构的表格 pkt tab pkt tab pkt malloc il
  • 为什么 qsort 中的排序方法改变了我的数组?

    https phaxis org 2012 07 12 get sorted index orderting of an array https phoxis org 2012 07 12 get sorted index ordertin
  • Qsort 在 C++ 中不适用于哪些类型?

    std sort通过使用交换元素std swap 它又使用复制构造函数和赋值运算符 保证您在交换值时获得正确的语义 qsort通过简单地交换元素的底层位来交换元素 忽略与要交换的类型相关的任何语义 虽然qsort尽管不了解您正在排序的类型的
  • c 中 qsort() 函数中的 cmpfunc

    有人可以解释一下吗cmpfunc这是用在qsort功能 什么是a and b在这个函数中 它们指向什么 int cmpfunc const void a const void b return int a int b a and b in
  • 快速排序示例(K&R C 书)中的错误?

    此快速排序应该将 v left v right 排序为递增顺序 从 K R 的 C 编程语言 第二版 复制 无注释 void qsort int v int left int right int i last void swap int v

随机推荐