二分法查找代码
int twodivide(int a[], int n,int target)
{
int begin = 0;
int end = n - 1;
int midle;
while (begin <= end)//是小于等于不是小于
{
midle = begin + (end - begin) / 2;//这里用头+(尾-头)/2
if (begin == end)
{
if (a[begin] == target) { return begin; }
else {return -1;}
}
if (a[midle] >= target)//这里是大于等于
{
end = midle;
}
else
{
begin = midle + 1;//这里是midle+1
}
}
return -1;
}
容器size的返回类型
vector.size()返回的类型是 unsigned int类型,不是int类型。
关于一些矩阵/字符串合并
合并两个字符串时,如果从前往后复制需要重复移动很多次字符,可以考虑从后往前复制比较快。
关于递归
递归的计算复杂度很高,并且可能包含大量的重复计算,能用迭代就不要用递归。
链表逆序
具体实现可以看LeetCode中的06从尾到头打印字符串
生成随机数[left,right]闭区间
#include<ctime>
srand(time(NULL));//生成随机种子
rand() % (rangeR - rangeL + 1) + rangeL;//生成随机数[l,r]闭区间
计算程序运行时间
clock_t startTime = clock();
int ret=testFunciton();
clock_t endTime = clock();
cout << double(endTime - startTime)/CLOCKS_PER_SEC<<"S" << endl;
判断报错
#include<cassert>
assert(isSorted<T>(array, n));
函数指针的使用
//函数调用函数指针
testSortTime("selectionSort", selectionSort<int>, array1, n);
//函数定义
template <typename T>
void selectionSort(T array[], int n)
{
for (int i = 0;i < n;i++)
{
int minIndex = i;
for (int j = i+1;j < n;j++)
{
if (array[j] < array[minIndex])
{
minIndex = j;
}
}
swap<T>(array[i], array[minIndex]);
}
}
//函数指针 void(*sort)
template<typename T>
void testSortTime(string Sortname, void(*sort)(T array[], int n), T array[], int n)//函数指针
{
clock_t startTime = clock();
sort(array, n);
clock_t endTime = clock();
assert(isSorted<T>(array, n));
cout << Sortname << " " << double(endTime - startTime)/CLOCKS_PER_SEC<<"S" << endl;
}