algorithm
全排列
bool prev_permutation(iterator start,iterator end);
bool next_permutation(iterator start,iterator end);//输出全排列
若下一个排序的字典序不是最大,返回true;
若是最大返回false;
用法如下:
int n;
int a[10] = { 0,1,2,3,4,5,6,7,8,9 };//先将要排序的数从小到大排列
int main()
{
cin >> n;
do
{
for (int i = 1; i <= n; i++)
{
cout << a[i];
}
cout << endl;
} while (next_permutation(a+1, a + n+1));//参数是排列的第一个数和第n个数的下一个地址
return 0;
}
二分查找
bool binary_search(arr,arr+size , indx)//二分查找
(提前排好序,从小到大)
arr:数组首地址
size:数组元素个数
indx:需要查找的值
函数功能: 在数组中以二分法检索的方式查找,若在数组(要求数组元素非递减)中查找到indx元素则真,若查找不到则返回值为假
lower_bound(arr,arr+size ,indx)//查找第一个大于或等于某个元素的位置
(提前排好序,从小到大)
参数说明:
arr:数组首地址
size:数组元素个数
indx:需要查找的值
函数功能: 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回大于或等于indx的第一个元素位置(注意是地址)。如果所有元素都小于val,则返回last的位置(注意:last位置的元素是越界的,即数组最后一个元素的下一个)
upper_bound(arr,arr+size ,indx)//查找第一个大于某个元素的位置。
参数说明:
arr:数组首地址
size数组元素个数
indx:需要查找的值
函数功能:函数upper_bound()返回的在前闭后开区间查找的关键字的上界,返回大于indx的第一个元素位置
如果indx大于数组中全部元素,返回的是last。(注意:数组下标越界)