程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C / C++算法學習筆記 -交換法

C / C++算法學習筆記 -交換法

編輯:C++入門知識

交換法:

交換法的程序最清晰簡單,每次用當前的元素一一的同其後的元素比較並交換。

[cpp] 
#include <iostream.h>  
 
void ExchangeSort(int* pData,int Count) 
 

 
    int iTemp; 
 
    for(int i=0;i<Count-1;i++) 
 
    { 
 
        for(int j=i+1;j<Count;j++) 
 
        { 
 
            if(pData[j]<pData[i]) 
 
            { 
 
               iTemp = pData[i]; 
 
               pData[i] = pData[j]; 
 
               pData[j] = iTemp; 
 
            } 
 
        } 
 
    } 
 

 
  
 
void main() 
 

 
    int data[] = {10,9,8,7,6,5,4}; 
 
    ExchangeSort(data,7); 
 
    for (int i=0;i<7;i++) 
 
        cout<<data[i]<<" "; 
 
    cout<<"/n"; 
 

#include <iostream.h>

void ExchangeSort(int* pData,int Count)

{

    int iTemp;

    for(int i=0;i<Count-1;i++)

    {

        for(int j=i+1;j<Count;j++)

        {

            if(pData[j]<pData[i])

            {

               iTemp = pData[i];

               pData[i] = pData[j];

               pData[j] = iTemp;

            }

        }

    }

}

 

void main()

{

    int data[] = {10,9,8,7,6,5,4};

    ExchangeSort(data,7);

    for (int i=0;i<7;i++)

        cout<<data[i]<<" ";

    cout<<"/n";

}


 

      比較前|第一次|第二次|第三次|第四次|第五次|第六次

        10        9           8         7          6          5         4          

         9        10         10       10        10        10       10

         8          8          9         9          9          9         9

         7          7          7         8          8          8         8

         6          6          6         6          7          7         7

         5          5          5         5          5          6         6

         4          4          4         4          4          4         5

從上面的算法來看,基本和冒泡法的效率一樣。

倒序(最糟情況)

第一輪:10,9,8,7->9,10,8,7->8,10,9,7->7,10,9,8(交換3次)

第二輪:7,10,9,8->7,9,10,8->7,8,10,9(交換2次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環次數:6次

交換次數:6次

 

其他:

第一輪:8,10,7,9->8,10,7,9->7,10,8,9->7,10,8,9(交換1次)

第二輪:7,10,8,9->7,8,10,9->7,8,10,9(交換1次)

第一輪:7,8,10,9->7,8,9,10(交換1次)

循環次數:6次

交換次數:3次

 

從運行的表格來看,交換幾乎和冒泡一樣糟。事實確實如此。循環次數和冒泡一樣也是1/2*(n-1)*n,所以算法的復雜度仍然是O(n*n)。由於我們無法給出所有的情況,所以只能直接告訴大家他們在交換上面也是一樣的糟糕(在某些情況下稍好,在某些情況下稍差)。

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved