数据结构知识回顾
-
**时间复杂度:**描述算法的执行快慢
1.1 常见的排序算法的时间复杂度有:插入排序: 直接插入排序(将元素逐个插入到有序表):O(n^2) 折半插入排序(折半查找,然后插入):O(n^2) 希尔排序(缩小增量排序) 交换排序: 起泡排序:(大/小元素逐轮下沉):O(n^2) 快速排序:(找到pivotkey的插入位置,递归):O(nlogn) 选择排序: 简单选择排序:(每轮在n-i+1的数组中中选出最小的与数组首元素交换位置):O(n^2) 堆排序:(建堆,输出堆顶元素,维护堆) O(nlogn) 归并排序:(递归合并两个有序的数组区间,直到数组长度为1): O(nlogn)
-
空间复杂度: 算法执行占用的内存空间大小的度量
-
递归时间复杂度的分析: 递归次数*每次的递归中的操作次数
//求x的n次方
int function1(int x,int n){
int result = 1;
for (int i = 0; i < n; i++){
result=result*x;
}
return result;
}
//此函数的时间复杂度是O(n),因为迭代次数斯N,每次操作次数是1(乘法)
int function2(int x, int n){
if(n == 0){
return 1;
}
return function2(x,n-1) * x;
}
//此函数的时间复杂度仍是O(n)
int function3(int x, int n){
if (n == 0){
return 1;
}
if (n % 2 == 1){ //如果是奇数次幂
return function3 (x, n / 2) * function3(x,n/2) * x;
}
//如果是偶数的话,直接返回
return function3 (x, n / 2) * function3 (x, n / 2);
}
//此函数的时间复杂度是O(n) 可以用二叉树来来分别计算迭代次数和每次的操作次数
int function4 (int x, int n){
if (n==0){
return 1;
}
t = function4 (x, n / 2);
if (n % 2 == 0){
return t * t * x;
}
return t * t;
}
//此函数的时间复杂度是O(nlogn),迭代log2^n 次,每次迭代做了一次乘法操作;