




下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、【W(wǎng)ord版本下載可任意編輯】 C+常用排序法分析 首先介紹一個(gè)計(jì)算時(shí)間差的函數(shù),它在 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次) 循環(huán)次數(shù):6次 交換次數(shù):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次) 循環(huán)次數(shù):6次 交換次數(shù):3次 上面我們給出了程序段,現(xiàn)在我們分析它:這里,影響我們算法性能的主要部分是循環(huán)和交換, 顯然,次數(shù)越多,性能就越差。從上面的程序我們可以看出循環(huán)的次數(shù)是固定的,為1+2+.+n-1。 寫成公式就是1/2*(n-1)*n。 現(xiàn)在注意,我們給出O方
3、法的定義: 若存在一常量K和起點(diǎn)n0,使當(dāng)n=n0時(shí),有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次) 循環(huán)次數(shù):6次 交換次數(shù):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次) 循環(huán)次數(shù):6次 交換次數(shù):3次 從運(yùn)行的表格來看,交換幾乎和冒泡一樣糟。事實(shí)確實(shí)如此。循環(huán)次數(shù)和冒泡一樣 也是1/2*(n-1)*n,所以算法的復(fù)雜度仍然是O(n*n)。由于我們無法給出所有的情況,所以 只能直接告訴大家他們?cè)诮粨Q上面也是一樣的糟糕(在某些情況下稍好,在某些情況下稍差)。 3.選擇法: 現(xiàn)在我們終于可以看到一點(diǎn)希望:選擇法,這種方法提高了一點(diǎn)性能(某些情況下) 這種方法類似我們?nèi)藶榈呐判蛄?xí)慣:從數(shù)據(jù)中選擇的同個(gè)值交換,在從省下的部分中 選擇的與第二個(gè)交換,這樣往復(fù)下去。 #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次) 循環(huán)次數(shù):6次 交換次數(shù):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次) 循環(huán)次數(shù):6次 交換次數(shù):3次 遺憾的是算法需要的循環(huán)次數(shù)依然是1/2*(n-1)*n。所以算法復(fù)雜度為O(n*n)。 我們來看他的交換。由于每次外層循環(huán)只產(chǎn)生交換(只有一個(gè)值)。所以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次)(循環(huán)1次) 第二輪:9,10,8,7-8,9,10,7(交換1次)(循環(huán)2次) 輪:8,9,10,7-7,8,9,10(交換1次)(循環(huán)3次) 循環(huán)次數(shù):6次 交換次數(shù):3次 其他: 輪:8,10,7,9-8,10,7,9(交換0次)(循環(huán)1次) 第二輪:8,10,7,9-7,8,10,9(交換1次)(循環(huán)2次) 輪:7,8,10,9-7,8,9,10(交換1次)(循環(huán)1次) 循環(huán)次數(shù):4次 交換次數(shù):2次 上面結(jié)尾的行為分析事實(shí)上造成了一種假象,讓我們認(rèn)為這種算法是簡(jiǎn)單算法中的,其實(shí)不是, 因?yàn)槠溲h(huán)次數(shù)雖然并不固定,我們?nèi)钥梢允褂肙方法。從上面的結(jié)果可以看出,循環(huán)
8、的次數(shù)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; /下面的比較都調(diào)用我們重載的操作符函數(shù) 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等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 輸液給藥后的觀察與護(hù)理
- 航空航天復(fù)合材料 課件 第3章 輕金屬基復(fù)合材料
- 旅游景區(qū)停車場(chǎng)車位租賃及旅游合作協(xié)議
- 餐飲客戶家庭聚餐簽單服務(wù)合同
- 征收搬遷拆遷合同匯編寶典
- 采購人員廉潔自律與責(zé)任追究協(xié)議
- 教育機(jī)構(gòu)分公司成立及人才培養(yǎng)合作合同
- 紙板品質(zhì)管理培訓(xùn)
- 成都房地產(chǎn)項(xiàng)目股權(quán)質(zhì)押購房合同
- 離婚協(xié)議及子女撫養(yǎng)權(quán)、贍養(yǎng)費(fèi)協(xié)議
- 2025年入團(tuán)考試常見問題及試題答案
- 績(jī)效考核合同協(xié)議書范本
- 2025年公路水運(yùn)工程重大事故隱患判定標(biāo)準(zhǔn)深度解析
- 日語水平考試試題及答案
- 廣東省東莞市2025屆九年級(jí)下學(xué)期中考二模物理試卷(含答案)
- 安徽省2023~2024學(xué)年新高一數(shù)學(xué)自主招生考試試題含答案
- 冠心病患者非心臟手術(shù)麻醉管理專家共識(shí)
- 高中生安全教育
- 嘉興市重點(diǎn)中學(xué)2025年初三沖刺押題(最后一卷)英語試題試卷含答案
- 嬰幼兒護(hù)理的重要知識(shí)點(diǎn)試題及答案
- 智能化綜合農(nóng)貿(mào)市場(chǎng)建設(shè)方案與可行性分析
評(píng)論
0/150
提交評(píng)論