ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

C和C++里的qsort&sort快排函数

2022-02-25 12:32:15  阅读:186  来源: 互联网

标签:sort const int double void qsort 快排 cmp


C和C++里的qsort&sort快排函数


qsort在C语言的stdlib.h头文件里面

int num[100];

//写函数:
int cmp_int(const void* _a, const void* _b) //参数格式固定  
{
	int *a = *(int*)_a;  //强制类型转换  
	int *b = *(int*)_b;
	return *a - *b;
}    //(这个cmp函数得自己写)  
//注意cmp函数的返回值必须是int型 

//调用:
qsort(num,100,sizeof(num[0]),cmp_int);
//数组名、长度、数组元素长度、排序方法  

注:
参数列表是两个空指针,现在他要去指向你的数组元素。所以转换为你当前的类型,然后取值。默认升序排列(从小到大),如果想降序排列返回 *b-*a 即可。

例如:

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

int cmp_int(const void* a, const void* b)  
{  
	return *(int*)a - *(int*)b;  
}  
//从大到小排序  

int main()  
{  
	int n=0;  //个数  
	int arr[40]={0};  
	scanf("%d",&n);  
	int i=0;  
	for(i=0;i<n;i++)  
	scanf("%d",&arr[i]);  
	//qsort--C语言函数  
	qsort(arr,n,4,cmp_int);  
	return 0;  
}  

补充:

1.对double型数组排序

int cmp_double(const void* _a , const void* _b)  //参数格式固定  
{  
	double* a = (double*)_a;    //强制类型转换  
	double* b = (double*)_b;  
	return *a > *b ? 1 : -1;   //特别注意  
}  

qsort(arr,100,sizeof(arr[0]),cmp_double);  

注:
在对浮点或者double型的一定要用三目运算符,因为函数返回值是int,直接相减可能精度缺失返回 0,表示相等,失去原本来存在的大小关系。

2.对字符串进行排序

int cmp_string(const void* _a , const void* _b)  //参数格式固定  
{  
	char* a = (char*)_a;  //强制类型转换  
	char* b = (char*)_b;  
	return strcmp(a,b);     //比较大小  
}  

qsort(str,100,sizeof(str[0]),cmp_string);  
设想:单个字符或ASCII直接比较或许也可以。

sort在C++语言的algorithm头文件里面

一、sort(a,a+10),没有第三个参数,实现的是从小到大

#include<iostream>  
#include<algorithm>  

using namespace std;  
int main() 
{ 
	int a[10]= {9,6,3,8,5,2,7,4,1,0};  
	for(int i=0; i<10; i++)  
		cout<<a[i]<<endl;  
		
	sort(a,a+10);  
	for(int i=0; i<10; i++)  
		cout<<a[i]<<endl;  
	return 0;  
}  

二、sort(a,a+10,complare),自定义排序方式

bool complare(int a,int b)  
{  
	return a>b;  
}  

sort(a,a+10,complare);  

三、sort函数第三个参数可以选择排序原则

less<数据类型>() //从小到大排序
greater<数据类型>() //从大到小排序

例如:

sort(a,a+10,less<int>());  

sort(a,a+10,greater<int>());  

sort(a,a+10,less<char>());  

sort(a,a+10,greater<char>());

–over–

标签:sort,const,int,double,void,qsort,快排,cmp
来源: https://blog.csdn.net/qq_51311937/article/details/123128981

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有