1. 程式人生 > 實用技巧 >1.2 演算法及其描述

1.2 演算法及其描述

1.2.1 演算法

  • 演算法是對特定問題求解步驟的一種描述,它是指令的有限序列

  • 特點:有窮性、確定性、可行性、有輸入、有輸出

  • 程式指使用某種計算機語言對一個演算法的具體實現,演算法側重於對解決問題的方法描述

1.2.2 演算法設計的目標

  • 正確性、可使用性、可讀性、健壯性、高效率、低儲存量需求

1.2.3 演算法描述

  • 交換兩個整數的演算法

    /*錯誤示例:x,y既是輸入型引數,也是輸出型引數,而swap1(x,y)中僅將形參x,y作為輸入型引數設計*/
    void swap1(int x,int y)
    {
      int tmp;
      tmp = x;x = y;y = tmp;
    }
    
    /*改正方法1:採用指標的方式來回傳形參的值*/
    void swap2(int *x,int *y)
    {
      int tmp;
      tmp = *x;
      *x = *y;
      *y = tmp;
    }
    
    /*改正方法2:採用引用型形參*/
    void swap(int &x,int &y)		//形參前的“&”符號不是指標運算子,而是引用
    {
      int tmp = x;
      x = y;
      y = tmp;
    }
    /*執行swap(a,b)時,形、實參的匹配相當於:
    	int &x = a;	//x為a的引用
    	int &y = b;	//y為b的引用
    	這樣a與x共享儲存空間,b與y共享儲存空間,執行函式後a,b的值發生了交換
    */
    
  • 求一元二次方程根的演算法

    int solution(double a,double b,double c,double &x1,doule &x2)
    {
      double d;
      d = b*b - 4*a*c;
      if(d > 0)
      {
        x1 = (-b + sqrt(d))/(2*a);
        x2 = (-b - sqrt(d))/(2*a);		
        return 2;		//兩個實根
      }
      else if(d == 0)
      {
        x1 = (-b)/(2*a);
        retrun 1;		//一個實根
      }
      else
        return 0;		//不存在實根
    }