编程艺术系列学习笔记
1.字符数组的动态分配
mallo/free
char *p=(char *)malloc(sizeof(char)*k);//强制类型转换
free(p); //有括号
new/delete
char *p=new char[k];
delete []p;
2.字符串的循环左/右移动(字符串长N,右移k)
(1) 最直观,以空间换取时间,时间:O(N),空间:O(k)
(2) 逆置逆置再逆置,复杂度为:O(N),与k无关
divide-and-conquer
3.模版函数
每个使用模版的函数都需要模版表示
template<class T>
void funA(T){}
template<class T> //这个不能省略
void funB(T){}
4.快速排序
(1)divide,<,pivot,> 该部分需要N
(2)conquer, 每个组再Quicksort
(3)combine, do nothing
时间复杂度:O(NlogN)
5.既然看到快速排序,就顺便把快排温习下
July的快排代码非常清晰,参考之~,以下代码测试正确
template<class T>
int quickPartition(T *p,int low,int high)
{
T key=p[low]; //first one as key
int i=low,j=high;
while(i<j)
{
while(i<j&&p[j]>key)
j--;
p[i]=p[j];
while(i<j&&p[i]<=key)
i++;
p[j]=p[i];
}
p[i]=key; //easy to forget
return i;
}
template<class T>
void quickSort(T *p,int low,int high)
{
if (low<high)
{
int k=quickPartition(p,low,high);//divide
quickSort(p,low,k-1);//conquer
quickSort(p,k+1,high);
}
}

浙公网安备 33010602011771号