#include "stdafx.h" void bubble1(int a[],int n) { int i,j,temp; for(i=0; i<n-1; i++) // n 次 { for(j=0; j<n-1-i; j++) //5 .. 4 .. 3 .. 2 .. 1 = ((1 + n) * n) /2 次 { if (a[j]>a[j+1]) //5 .. 4 .. 3 .. 2 .. 1 = ((1 + n) * n) /2 次 { temp = a[j]; //5 .. 4 .. 3 .. 2 .. 1 = ((1 + n) * n) /2 次 a[j] = a[j+1]; //5 .. 4 .. 3 .. 2 .. 1 = ((1 + n) * n) /2 次 a[j+1] = temp ; //5 .. 4 .. 3 .. 2 .. 1 = ((1 + n) * n) /2 次 } } } for(i=0;i<n;i++) // n 次 { printf("%d",a[i]); // n 次 } } //简化之后 f(n) = n + ((1 + n) * n) /2 * 5 + 2n // T(n) = O(n2次方) 是平方阶的复杂度
算法复杂度
算法: 顾名思义 求解一个特定问题的 指令(代码)的有限序列;
算法有五个特征:
1, 有穷性: 有限步长或时间内终止.(无限循环之类是不合理的,程序可以无限运行下去但算法不可以这么理解.永远没有答案的算法就是无意义的算法)
2, 确定性,无二义性.
3, 可行性. (类似 1 + 2 + 3 .... 无穷 无穷是无法计算的 所以不可行)
4, 输入量: 有0个或多个输入量.
5, 输出量: 至少一个输出量.
算法的设计要求:
1, 正确性. 2, 可读性 3, 健壮性(保证数据输入与算法的逻辑有效) 4 , 高效与低存储量
时间复杂度:
1 基本语句 的 执行次数 综合 称为 频度. 记 f(n)
2 时间复杂度 是指 算法执行时间的 增长率 T(n)
Void fun( int n )
{
Int s = 0; // 1次
For(i = 0; i < n ; i++) // n次
{
S= s + i; // n次
}
}
计算公式
F(n) = 每条语句的执行次数之和
F (n) = 1 + n + n = 1+2n 频度
T(n) = O(n) 所有执行的语句中 执行次数最多的一项.
T (n) = O(f(n)) = O(1+2n) = O(n) 时间复杂性 = O(n) 的线性数量级也称 线性阶
数量级 的比较 计算如下
O(1) < O(log 2 n) < O(n) < O(n2) <O(n3) < .... < O(2 n)
常数阶(不带循环之类的) < 线性阶(一次循环) < 平方阶(2次循环嵌套) < .........