C++ qsort、sort函数用法

#include<iostream>
#include<algorithm>
using namespace std;
// qsort调用的比较函数
// 		1.参数类型必须为 const void *类型 
//		2.必须有两个参数 
//		3.返回类型必须是 int ,不能是 bool类型 
int cmpchar(const void *a,const void *b){
	char *c1 = (char *)a;
	char *c2 = (char *)b;
	return *c1-*c2;
}
//	char[]类型qsort排序 
void test_1(){
//	赋予字符数:8,实际使用 sizeof(str)/sizeof(char)计算出来的字符数是 9 ,因为包含了 '\0' 
	char str[]="34217856";
//	计算字符长度 
	int len = sizeof(str)/sizeof(char);
	cout<<len<<endl; 
//	str[len]为 '\0',排序时不用包含 
//	qsort为内置函数
//		1. str 为数组首地址
//		2. len - 1 为数组有效长度 
//		3. sizeof(char) 为每个元素的大小
//		4. cmp为函数指针	 
	qsort(str,len-1,sizeof(char),cmpchar);
//	输出排序后的元素 
	for(int i=0;i<len;i++){
		cout<<str[i]<<" ";
	}
//	1 2 3 4 5 6 7 8
} 
int cmpint(const void *a,const void *b){
	return *(int *)a-*(int *)b;
//	以上等价于: 
//	int *p1 = (int *)a;
//	int *p2 = (int *)b;
//	return *p1-*p2; 
}
// 数字类型数组qsort排序 
void test_2(){
	int arr[]={11,6,8,4,86,12,4,59,3,1,27,34};
	qsort(arr,sizeof(arr)/sizeof(int),sizeof(int),cmpint);
	cout<<endl;
	for(int i=0;i<sizeof(arr)/sizeof(int);i++){
		cout<<arr[i]<<" ";
	} 
//	1 3 4 4 6 8 11 12 27 34 59 86
}
//	sort函数对数组排序 
void test_3(){
//	例一: char数组排序 
	char cc[]="abdasbcdad";
	int len = sizeof(cc)/sizeof(char); 
//	greater 为函数对象,指定从大到小 
//	less<char>(),指定从小到大,一般为默认,无需指定 
	sort(cc,cc+len-1,greater<char>());
	cout<<cc<<endl;
	
// 	例二: int数组排序 
	int arr[] = {200,100,300,900,400,12,49,200};
	int len2 = sizeof(arr)/sizeof(int);
	sort(arr,arr+len2);
	for(int i=0;i<len2;i++){
		cout<<arr[i]<<" ";
	}
	cout<<endl;
}
//	sort对迭代器排序 
void test_4(){
	string ss = "13452345239";
	sort(ss.begin(),ss.end());
//	使用copy函数进行输出,需要添加:#include<iterator>
//	ostream_iterator<char>(cout,' ')中 ' '必须要使用 " ",否则报错 
	copy(ss.begin(),ss.end(),ostream_iterator<char>(cout," "));
	cout<<endl;
	
//	对排序后的字符去重 
	int last = unique(ss.begin(),ss.end())-ss.begin();
//	0表示起始位置,last 为字符长度
	string res(ss,0,last);
	cout<<res<<endl;
	cout<<endl; 
	
//	用substr可达到与上面同样的效果:
//	string sa = "12345678";
//	起始位置为 5 ,长度为3
//	string sb = sa.substr(5,3);
//	截取:678

	
//	copy函数输出字符用法:
	char cc[]="1234567";
	int len = sizeof(cc)/sizeof(char) - 1;
//	字符数组输出 
	copy(cc,cc+len,ostream_iterator<char>(cout," "));
	cout<<endl;
	
}
int main(){
//	test_1();
//	test_2();
//	test_3();
	test_4();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值