使用方法,需用C++

#include<algorithm>
using namespace std;

常用函数

1、sort排序函数,时间复杂度为n*log2n,比冒泡之类的排序算法效率要高。传参为待排序元素首尾地址。默认升序排序,可重写cmp函数,实现降序排序或自定义排序。
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int i,t;
	int a[110] = {6,5,4,5,2,5,6,9,3,2};
	sort(a,a+10);
	printf("默认升序排序:"); 
	for(int i=0;i<10;i++)
		printf("%d ",a[i]);	
	return 0;
} 

【C++】<algorithm>中好用的函数_C++

#include <stdio.h>
#include <algorithm>
using namespace std;
bool cmp(int a,int b){
 return a>b;
}
int main()
{
	int i,t;
	int a[110] = {6,5,4,5,2,5,6,9,3,2};
	sort(a,a+10,cmp);
	printf("自定义cmp实现降序:"); 
	for(int i=0;i<10;i++)
		printf("%d ",a[i]);	
	return 0;
} 

【C++】<algorithm>中好用的函数_#include_02

#include <stdio.h>
#include <algorithm>
using namespace std;
struct s{
	int step;
	int x,y;	
}s1[110]; 
bool cmp(s f,s l){
 return f.x<l.x;
}
int main()
{
	int i,t;
	for(i=0;i<10;i++)
	{
		s1[i].x = 90-i;
		s1[i].y = i-90;
		s1[i].step = i;
	}
	sort(s1,s1+10,cmp);
	printf("自定义cmp实现结构体自定义排序:"); 
	for(i=0;i<10;i++)
	{
		printf("%d %d %d\n",s1[i].step,s1[i].x,s1[i].y);
	} 
	return 0;
} 

【C++】<algorithm>中好用的函数_stl_03

2、next_permutationprev_permutation全排列函数
注意事项
(1)因为他是直接对你传参的数组进行操作,从当前位置取下排列或上排列,所以你传值必须是有序的才能获取到全排列

例如:使用next_permutation你必须保证你的传参是升序才能获得全排列,否则会缺省一些排列(从你的序列往前的他不会遍历到)。同理使用prev_permutation需传降序参。

(2)在do-while循环体中,对参数数组,只能进行读操作,不能进行的写操作。因为你修改了他的值的话,下一步的寻排列会遇到不一样的参数,很有可能发生死循环。
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int i,t;
	int a[110] = {13,29,35,44};
	do{
		for(i=0;i<4;i++)
			printf("%d ",a[i]);
		printf("\n");
	}while(next_permutation(a,a+4));
	return 0;
}

【C++】<algorithm>中好用的函数_C++_04
如果错误的搭配了传参的升降序与next、prev,则缺省部分排序。

#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int i,t;
	int a[110] = {13,29,35,44};
	do{
		for(i=0;i<4;i++)
			printf("%d ",a[i]);
		printf("\n");
	}while(prev_permutation(a,a+4));
	return 0;
}

【C++】<algorithm>中好用的函数_stl_05

3、max min abs取最大值、最小值、绝对值函数
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int i,t;
	int x = 13;
	int y = 65;
	int z = -99;
	printf("%d",max(x,y));
	printf(" %d",min(x,z));
	printf(" %d",abs(z));
	return 0;
}

【C++】<algorithm>中好用的函数_算法_06

4、reverse将传参序列逆序翻转,传参首位地址
#include <stdio.h>
#include <algorithm>
using namespace std;
int main()
{
	int i,t;
	int a[110] = {21,32,545,68,23,3};
	reverse(a,a+6);
	for(i=0;i<6;i++)
		printf("%d ",a[i]);
	return 0;
}

【C++】<algorithm>中好用的函数_#include_07