1、找出数组中最大(最小)的元素 max(x,y),min(x,y)
void max_min(){
int Array[10] = {12,-1,34,6,999,8,1,17,67,100};
int min_num=9999,max_num=0;
for(int i=0;i<10;i++){
min_num = min(min_num,Array[i]);
max_num = max(max_num,Array[i]);
}
cout<<"min: "<<min_num<<endl;
cout<<"max: "<<max_num<<endl;
}
输出结果:
2、两个元素的交换swap(x,y) 在冒泡排序中可以用上
void Bubble_sort(){
int Array[10] = {12,-1,34,6,999,8,1,17,67,100};
int flag;
for(int i=9;i>=0;i--){
flag=0;
for(int j=0;j<i;j++){
if(Array[j]>Array[j+1]){
flag=1;
swap(Array[j],Array[j+1]);
}
}
if(flag==0) break;
}
for(int i=0;i<10;i++) cout<<Array[i]<<" ";
cout<<endl;
}
输出结果:
3、逆置反转reverse(Array,Array+n):将数组Array[0,n)内的元素逆置可以用于数组的循环右移上面(这里展示循环右移4个单元)
void Move_Right(){
int Array[10] = {1,2,3,4,5,6,7,8,9,10};
reverse(Array,Array+4);
reverse(Array+4,Array+10);
reverse(Array+0,Array+10);
for(int i=0;i<10;i++) cout<<Array[i]<<" ";
cout<<endl;
}
输出结果:
4、求指定数据集的全排列 next_permutation(Array,Array+3):给出一个序列在全排列中的下一个序列,若已经达到了最后一个时会返回false
void next_permutation_test(){
int Array[3]={1,2,3};//注意必须要一开始是有序的1,2,3才能输出全部的3!个全排列。
do{
printf("%d %d %d\n",Array[0],Array[1],Array[2]);
}while(next_permutation(Array,Array+3));
}
输出结果:
若需要逆序输出上面的排序结果,就需要使用该排列的前一个全排列函数为prev_permutation(Array,Array+3);使用这个函数令初始序列等于3,2,1。就可以逆序输出上面的结果。
5、fill(Array,Array+5,n):将Array中区间[Array,Array+5) 赋予值n;
6、sort(Array,Array+len,cmp) 也是最有用的排序算法,在结构体排序中经常用到。这个在这里就不赘述了。
7、 lower_bound(first,last,val)在数组的[first,last)中找第一个值大于等于val的元素的位置;
lower_bound(first,last,val)在数组的[first,last)中找第一个值大于val的元素的位置;
注意这两个函数返回的是数组元素的指针,或者容器的迭代器。(不是数组下标)。
void bound_test(){
int Array[17] = {1,2,3,3,3,3,3,3,4,5,6,7,7,7,7,7,79};
cout<<Array[lower_bound(Array,Array+17,3)-Array]<<" lower_bound position:"<<lower_bound(Array,Array+17,3)-Array<<endl;
cout<<Array[upper_bound(Array,Array+17,3)-Array]<<" upper_bound position:"<<upper_bound(Array,Array+17,3)-Array<<endl;
}
/*
在算法考试,算法竞赛中常用的STL_algorithm
*/
#include
//#include
using namespace std;
//1、找出数组中最大(最小)的元素 max(x,y),min(x,y)
void max_min(){
int Array[10] = {12,-1,34,6,999,8,1,17,67,100};
int min_num=9999,max_num=0;
for(int i=0;i<10;i++){
min_num = min(min_num,Array[i]);
max_num = max(max_num,Array[i]);
}
cout<<"min: "<<min_num<<endl;
cout<<"max: "<<max_num<<endl;
}
//2、两个元素的交换swap(x,y) 在冒泡排序中可以用上
void Bubble_sort(){
int Array[10] = {12,-1,34,6,999,8,1,17,67,100};
int flag;
for(int i=9;i>=0;i--){
flag=0;
for(int j=0;j<i;j++){
if(Array[j]>Array[j+1]){
flag=1;
swap(Array[j],Array[j+1]);
}
}
if(flag==0) break;
}
for(int i=0;i<10;i++) cout<<Array[i]<<" ";
cout<<endl;
}
//3、逆置反转reverse(Array,Array+n):将数组Array[0,n)内的元素逆置
//可以用于数组的循环右移上面(这里展示循环右移4个单元)
void Move_Right(){
int Array[10] = {1,2,3,4,5,6,7,8,9,10};
reverse(Array,Array+4);
reverse(Array+4,Array+10);
reverse(Array+0,Array+10);
for(int i=0;i<10;i++) cout<<Array[i]<<" ";
cout<<endl;
}
//4、求指定数据集的全排列 next_permutation(Array,Array+3):给出一个序列在全排列中的下一个
//序列,若已经达到了最后一个时会返回false
void next_permutation_test(){
int Array[3]={1,2,3};//注意必须要一开始是有序的1,2,3才能输出全部的3!个全排列。
do{
printf("%d %d %d\n",Array[0],Array[1],Array[2]);
}while(next_permutation(Array,Array+3));
}
//5、fill(Array,Array+5,n):将Array中区间[Array,Array+5] 赋予值n;
//6、sort(Array,Array+len,cmp) 这个大家一网上搜一大堆,也是最有用的排序算法,
//在结构体排序中经常用到。这个在这里就不赘述了。
/*
7、 lower_bound(first,last,val)在数组的[first,last)中找第一个值大于等于val的元素的位置;
lower_bound(first,last,val)在数组的[first,last)中找第一个值大于val的元素的位置; 注意
这里返回的是数组元素的指针,或者容器的迭代器。
*/
void bound_test(){
int Array[17] = {1,2,3,3,3,3,3,3,4,5,6,7,7,7,7,7,79};
cout<<Array[lower_bound(Array,Array+17,3)-Array]<<" lower_bound position:"<<lower_bound(Array,Array+17,3)-Array<<endl;
cout<<Array[upper_bound(Array,Array+17,3)-Array]<<" upper_bound position:"<<upper_bound(Array,Array+17,3)-Array<<endl;
}
int main(){
max_min();
Bubble_sort();
Move_Right();
next_permutation_test();
bound_test();
}