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

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–

上一篇:简单贪心策略


下一篇:关于本蒟蒻初学BFS