




下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、【Word版本下載可任意編輯】 C+常用排序法分析 首先介紹一個計算時間差的函數,它在 void BubbleSort(int* pData,int Count) int iTemp; for(int i=1;i=i;j-) if(pData iTemp = pData; pData = pData; pData = iTemp; void main() int data = 10,9,8,7,6,5,4; BubbleSort(data,7); for (int i=0;i10,9,7,8-10,7,9,8-7,10,9,8(交換3次) 第二輪:7,10,9,8-7,10,8,9-7,8,1
2、0,9(交換2次) 輪:7,8,10,9-7,8,9,10(交換1次) 循環次數:6次 交換次數:6次 其他: 輪:8,10,7,9-8,10,7,9-8,7,10,9-7,8,10,9(交換2次) 第二輪:7,8,10,9-7,8,10,9-7,8,10,9(交換0次) 輪:7,8,10,9-7,8,9,10(交換1次) 循環次數:6次 交換次數:3次 上面我們給出了程序段,現在我們分析它:這里,影響我們算法性能的主要部分是循環和交換, 顯然,次數越多,性能就越差。從上面的程序我們可以看出循環的次數是固定的,為1+2+.+n-1。 寫成公式就是1/2*(n-1)*n。 現在注意,我們給出O方
3、法的定義: 若存在一常量K和起點n0,使當n=n0時,有f(n) void ExchangeSort(int* pData,int Count) int iTemp; for(int i=0;i9,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,
4、10,9-7,8,9,10(交換1次) 循環次數:6次 交換次數:3次 從運行的表格來看,交換幾乎和冒泡一樣糟。事實確實如此。循環次數和冒泡一樣 也是1/2*(n-1)*n,所以算法的復雜度仍然是O(n*n)。由于我們無法給出所有的情況,所以 只能直接告訴大家他們在交換上面也是一樣的糟糕(在某些情況下稍好,在某些情況下稍差)。 3.選擇法: 現在我們終于可以看到一點希望:選擇法,這種方法提高了一點性能(某些情況下) 這種方法類似我們人為的排序習慣:從數據中選擇的同個值交換,在從省下的部分中 選擇的與第二個交換,這樣往復下去。 #include (iTemp=9)10,9,8,7-(iTemp=
5、8)10,9,8,7-(iTemp=7)7,9,8,10(交換1次) 第二輪:7,9,8,10-7,9,8,10(iTemp=8)-(iTemp=8)7,8,9,10(交換1次) 輪:7,8,9,10-(iTemp=9)7,8,9,10(交換0次) 循環次數:6次 交換次數:2次 其他: 輪:8,10,7,9-(iTemp=8)8,10,7,9-(iTemp=7)8,10,7,9-(iTemp=7)7,10,8,9(交換1次) 第二輪:7,10,8,9-(iTemp=8)7,10,8,9-(iTemp=8)7,8,10,9(交換1次) 輪:7,8,10,9-(iTemp=9)7,8,9,10(
6、交換1次) 循環次數:6次 交換次數:3次 遺憾的是算法需要的循環次數依然是1/2*(n-1)*n。所以算法復雜度為O(n*n)。 我們來看他的交換。由于每次外層循環只產生交換(只有一個值)。所以f(n) void InsertSort(int* pData,int Count) int iTemp; int iPos; for(int i=1;i=0) & (iTemp pData = pData; iPos-; pData = iTemp; void main() int data = 10,9,8,7,6,5,4; InsertSort(data,7); for (int i=0;i9,
7、10,8,7(交換1次)(循環1次) 第二輪:9,10,8,7-8,9,10,7(交換1次)(循環2次) 輪:8,9,10,7-7,8,9,10(交換1次)(循環3次) 循環次數:6次 交換次數:3次 其他: 輪:8,10,7,9-8,10,7,9(交換0次)(循環1次) 第二輪:8,10,7,9-7,8,10,9(交換1次)(循環2次) 輪:7,8,10,9-7,8,9,10(交換1次)(循環1次) 循環次數:4次 交換次數:2次 上面結尾的行為分析事實上造成了一種假象,讓我們認為這種算法是簡單算法中的,其實不是, 因為其循環次數雖然并不固定,我們仍可以使用O方法。從上面的結果可以看出,循環
8、的次數f(n) void run(int* pData,int left,int right) int i,j; int middle,iTemp; i = left; j = right; middle = pData; /求中間值 do while(pDatai),遞歸右半邊 if(righti) run(pData,i,right); void QuickSort(int* pData,int Count) run(pData,0,Count-1); void main() int data = 10,9,8,7,6,5,4; QuickSort(data,7); for (int i=
9、0;i void Bubble2Sort(int* pData,int Count) int iTemp; int left = 1; int right =Count -1; int t; do /正向的部分 for(int i=right;i=left;i-) if(pData iTemp = pData; pData = pData; pData = iTemp; t = i; left = t+1; /反向的部分 for(i=left;i int ShellPass(int * array,int d) /一趟增量為d的希爾插入排序 int temp; int k=0; for(int
10、 i=d+1;i1); cout(CMyData& data ); private: char* m_strDatamember; int m_iDataSize; ; / MyData.cpp文件 / CMyData:CMyData(): m_iIndex(0), m_iDataSize(0), m_strDatamember(NULL) CMyData:CMyData() if(m_strDatamember != NULL) delete m_strDatamember; m_strDatamember = NULL; CMyData:CMyData(int Index,char* st
11、rData): m_iIndex(Index), m_iDataSize(0), m_strDatamember(NULL) m_iDataSize = strlen(strData); m_strDatamember = new char; strcpy(m_strDatamember,strData); CMyData& CMyData:operator =(CMyData &SrcData) m_iIndex = SrcData.m_iIndex; m_iDataSize = SrcData.GetDataSize(); m_strDatamember = new char; strcp
12、y(m_strDatamember,SrcData.GetData(); return *this; bool CMyData:operator (CMyData& data ) return m_iIndexdata.m_iIndex; / / /主程序部分 #include void run(T* pData,int left,int right) int i,j; T middle,iTemp; i = left; j = right; /下面的比較都調用我們重載的操作符函數 middle = pData; /求中間值 do while(pDatai),遞歸右半邊 if(righti) run(pData,i,right); template void QuickSort(T* pData,int Count) run(pData,0,Count-1); void main() CMyData data = CMyData(8,xulion), CMyData(7,sanzoo), CMyDa
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司物流競賽活動方案
- 2025年文化產業管理專業研究生入學考試試卷及答案
- 2025年健康促進師職業資格考試試卷及答案
- 2025年家庭教育與青少年發展考試卷及答案
- 2025年教師資格考試試卷及答案學習要點明確
- 與健康同行與心靈相約戶外活動
- 訓戰培訓總結
- 護理人員心理支持
- 兩個小時的培訓
- 造口病人并發癥的護理
- 新生兒病區??评碚摽荚囶}庫
- 健康評估咳嗽咳痰課件
- 白酒酒店合作合同協議書
- 中國融通農業發展有限集團有限公司招聘筆試題庫2025
- 實驗室通風系統工程施工方案
- 2024淮安市專業技術人員繼續教育試題參考答案
- 成人體外膜肺氧合循環輔助護理專家共識-解讀與臨床應用(2025版)
- 慢性活動性EB病毒病診治專家共識(2025版)解讀
- 2025年入團考試常見問題及試題答案
- 2025年公路水運工程重大事故隱患判定標準深度解析
- 日語水平考試試題及答案
評論
0/150
提交評論