面宅

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
#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)

时间复杂度 是指 算法执行时间的 增长率 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次循环嵌套) < .........

posted on 2013-05-20 15:33  面宅  阅读(143)  评论(0编辑  收藏  举报