数据结构
程序性能
时间空间复杂性分析方法
- 时间复杂性
S(P)= C + Sp
C表示一个常亮,表示固定需要的时间,Sp表示可变部分所需的空间 - 时间复杂性
T(P) = 编译时间 + 运行时间(tp) - 大写O符号:给出函数f的一个上限
Ω符号:与大O符号类似,它用来估算f的下限值
2种搜索方法
- 顺序搜索:无序数组搜索
template<class T>
int SequentialSearch(T a[], const T& x, int n)
{
int i;
for(int i=0; i<n; i++)
if(i == n) return -1;
return i;
}
- 折半搜索:有序数组查找元素
template<class T>
int BinarySearch(T a[], const T& x, int n)
{
int left=0, right=n-1;
while(left <=right)
{
int middle = (left+right)/2;
if(a[middle] == x) return middle;
if(x>a[middle]) left = middle+1;
else right = middle-1;
}
return -1;
}
4种排序方法
排序方法 | 计数排序 | 选择排序 | 冒泡排序 | 插入排序 |
---|---|---|---|---|
元素交换次数 | 2n | 3n-1 | 0~n-1 | 0~n-1 |
元素比较次数 | (n-1)n/2 | (n-1)n/2 | (n-1)n/2 | (n-1)n/2 |
- 计数排序
template<class T>
void Rearrenge(T a[], int n, int r[]) //r[]为排名
{
T *u = new T[n+1];
for(int i=1; i<n; i++)
u[r[i]] = a[i];
for(int i=1; i<n; i++)
a[i] = u[i];
delete [] u;
}
- 选择排序
template<class T>
void SelectSort