1.大O记法,上限。有意义的是最小上限。
2.Ω记法,下限。有意义的是最大下限。
3.Q记法,当最大下限等于最小上限时,使用该记法。
常见函数渐进性比较:
项 名称
1 常数
logn 对数
n 线性
nlogn n个logn
n2 平方
n3 立方
2n 指数
n! 阶乘
1 < logn < n < nlogn < n^2
< n^3
< 2^n < n!(<:渐进地小于)
常见排序方法的复杂度分析:
代码及分析如下:
//对各种基础的排序方法的性能的分析
//1.计数排序 复杂度需要n*(n-1)/2次比较和2n次移动 时间复杂度是n^2
void ranks(int a[],int n, int r[]){
//r【i】中存的是第i元素的大小在第r【i】
for(int i=0;i<n;i++){
r[i] = 0;
}
//比较所有元素得到序号
for(int i=0;i<n-1;i++){
for(int j=i+1;j<n;j++){
if(a[j]>=a[i])//!!!确保有序性
{
r[j]++;
} else{
r[i]++;
}
}
}
}
void ranksort(int a[],int n,int r[]){
int *u = new int[n];
for(int i=0;i<n;i++){
// u[i] = a[r[i]];错误的想法
u[r[i]] = a[i];
}
for(int i=0;i<n;i++){
a[i] = u[i];
}
delete [] u;
}
//改进:再有序号的基础上原地重新排序
void rearrange(int a[],int n