算法是指解题方案的准确和描述,那么衡量一个算法的优劣可以用时间复杂度和空间复杂度来表示。
1.时间复杂度:O(1),O(n),O(n^2),O(n^3),O(log2n),O(nlog2n),O(n!)等等
比如说:
a = 2 是O(1)
O(n^2)
交换i和j的内容
sum=0; (一次)
for(i=1;i<=n;i++) (n次 )
for(j=1;j<=n;j++) (n^2次 )
sum++; (n^2次 )
解:T(n)=2n^2+n+1 =O(n^2)
for (i=1;i<n;i++)
{
y=y+1; ①
for (j=0;j<=(2*n);j++)
x++; ②
}
解: 语句1的频度是n-1
语句2的频度是(n-1)*(2n+1)=2n^2-n-1
f(n)=2n^2-n-1+(n-1)=2n^2-2
该程序的时间复杂度T(n)=O(n^2).
a=0;
b=1; ①
for (i=1;i<=n;i++) ②
{
s=a+b; ③
b=a; ④
a=s; ⑤
}
解:语句1的频度:2,
语句2的频度: n,
语句3的频度: n-1,
语句4的频度:n-1,
语句5的频度:n-1,
T(n)=2+n+3(n-1)=4n-1=O(n).
i=1; ①
while (i<=n)
i=i*2; ②
解: 语句1的频度是1,
设语句2的频度是f(n), 则:2^f(n)<=n;f(n)<=log2n
取最大值f(n)= log2n,
T(n)=O(log2n )
for(i=0;i<n;i++)
{
for(j=0;j<i;j++)
{
for(k=0;k<j;k++)
x=x+2;
}
}
2.基本算法
(1)冒泡算法(O(n^2))
data = [1,2,3,6,9,7,45,12]
(2)最小算法(O(n))loop_count = 0 for i in range(len(data)): for j in range(len(data) - i - 1): if data[j] < data[j+1]: tmp = data[j] data[j] = data[j+1] data[j+1] = tmp loop_count += 1 print(data) print(data) print('time:', loop_count)
loop_count = 0 mid_num = data[0] for i in range(1, len(data)): if data[i] > mid_num: mid_num = mid_num else: mid_num = data[i] loop_count += 1 print(mid_num) print(loop_count)3.插入排序
for index in range(1, len(data)): currunt_num = data[index] position = index while position > 0 and data[position - 1] >currunt_num: data[position] = data[position - 1] position -= 1 data[position] = currunt_num print(data)