版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
查找算法性能研究設計題目查找算法性能研究2.設計內(nèi)容對以下存儲表示的數(shù)據(jù)進行查找算法進行比較:順序存儲、有序順序存儲、鏈表存儲、二叉排序樹存儲.首先生成不少于2000個隨機數(shù)按要求存儲,然后隨機生成若干個數(shù)據(jù)進行查找。統(tǒng)計每次查找所用的時間及平均使用時間,最后對結(jié)果作出簡單分析及討論.流程圖結(jié)果#include<stdio.h>#include<stdlib.h>#include<iostream>staticconstintARRAY_MAX=10000;typedefintDataType;classSequentialStorage{ public: DataTypedata[ARRAY_MAX]; inttop; SequentialStorage() { top=-1; } voidinsertData(DataTypedata) { if(top==ARRAY_MAX-1) return; this->data[++top]=data; } intfind(DataTypedata) { for(inti=0;i<=top;i++) { if(this->data[i]==data) returni; } return-1; }};classOrderlySequenceStorage{ public: DataTypedata[ARRAY_MAX]; inttop; OrderlySequenceStorage() { top=-1; } voidinsertData(DataTypedata)//插入排序 { if(top==ARRAY_MAX-1) return; inti=top; while(this->data[i]>data&&i!=-1) { this->data[i+1]=this->data[i]; i--; } this->data[i+1]=data; top++; } intfind(DataTypedata)//普通查找 { for(inti=0;i<=top;i++) { if(this->data[i]==data) returni; } return-1; } intfind2(DataTypedata)//二分法 { if(this->data[0]>data||this->data[top]<data) return-1; if(this->data[0]==data) return0; if(this->data[top]==data) returntop; inta=0; intb=top; while(true) { if(a==b-1) return-1; if(this->data[(a+b)/2]==data) return(a+b)/2; elseif(this->data[(a+b)/2]<data) a=(a+b)/2; else b=(a+b)/2; } }};typedefstructnode{ DataTypedata; structnode*pNext;}LLSNode;classLinkedListStorage{public: LLSNode*pHead; LinkedListStorage() { pHead=NULL; } voidinsertData(DataTypedata) { LLSNode*p=(LLSNode*)malloc(sizeof(LLSNode)); p->data=data; p->pNext=pHead; pHead=p; } LLSNode*find(DataTypedata) { LLSNode*p=pHead; while(p) { if(p->data==data) returnp; p=p->pNext; } returnNULL; }};typedefstructnode2{ DataTypedata; structnode2*lchild,*rchild;}BSTNode;classBinarySortTree{public: BSTNode*pRoot; BinarySortTree() { pRoot=NULL; } voidinsertData(DataTypedata) { BSTNode*f,*p=pRoot; while(p) { f=p; if(data<p->data) p=p->lchild; else p=p->rchild; } p=(BSTNode*)malloc(sizeof(BSTNode)); p->data=data; p->lchild=NULL; p->rchild=NULL; if(pRoot==NULL) pRoot=p; else if(data<f->data) f->lchild=p; else f->rchild=p; } BSTNode*find(DataTypedata) { if(pRoot==NULL) returnNULL; else returnrecursion(data,pRoot); } BSTNode*recursion(DataTypedata,BSTNode*p) { if(data==p->data||p==NULL) returnp; elseif(data<p->data) returnrecursion(data,p->lchild); else returnrecursion(data,p->rchild); } voidprint() { if(pRoot!=NULL) printR(pRoot); } voidprintR(BSTNode*p) { if(p->lchild!=NULL) printR(p->lchild); printf("%d\t",p->data); if(p->rchild!=NULL) printR(p->rchild); }};classCPUTime{public: _int64getCPUCycleCount(void) { _asm_emit0x0F _asm_emit0x31 } longlongarr[1000]; intcount; longlonglastCPUCycleCount; intrandCount; CPUTime() { for(inti=0;i<1000;i++) arr[i]=0; count=-1; lastCPUCycleCount=getCPUCycleCount(); randCount=0; } voidsetTimePoint() { arr[++count]=getCPUCycleCount()-lastCPUCycleCount; lastCPUCycleCount=getCPUCycleCount(); } intrand() { randCount++; inttemp=getCPUCycleCount()%20000; return(temp*(randCount+temp))%10007; }};intmain(){ SequentialStoragess; OrderlySequenceStorageoss; LinkedListStoragells; BinarySortTreebst; DataTypetemp1; CPUTimecpuTime; for(inti=0;i<2000;i++) { temp1=cpuTime.rand(); ss.insertData(temp1); oss.insertData(temp1); lls.insertData(temp1); bst.insertData(temp1); } DataTypetemp[7]; for(inti=0;i<7;i++) temp[i]=ss.data[cpuTime.rand()%2000]; cpuTime.setTimePoint(); for(inti=0;i<7;i++) { ss.find(temp[i]); cpuTime.setTimePoint(); } for(inti=0;i<7;i++) { oss.find(temp[i]); cpuTime.setTimePoint(); } for(inti=0;i<7;i++) { oss.find2(temp[i]); cpuTime.setTimePoint(); } for(inti=0;i<7;i++) { lls.find(temp[i]); cpuTime.setTimePoint(); } for(inti=0;i<7;i++) { bst.find(temp[i]); cpuTime.setTimePoint(); } intcount=1; printf("各項存儲結(jié)構查找已存在數(shù)據(jù)的時間(cpu周期):\n"); printf("儲存方式\t\t數(shù)據(jù)\t數(shù)據(jù)\t數(shù)據(jù)\t數(shù)據(jù)\t數(shù)據(jù)\t數(shù)據(jù)\t平均\n"); inta[9]; for(inti=1;i<8;i++) a[i]=(int)cpuTime.arr[count++]; a[8]=(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7; printf("順序存儲\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]); for(inti=1;i<8;i++) a[i]=(int)cpuTime.arr[count++]; a[8]=(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7; printf("有序順序存儲(普通)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]); for(inti=1;i<8;i++) a[i]=(int)cpuTime.arr[count++]; a[8]=(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7; printf("有序順序存儲(二分法)\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]); for(inti=1;i<8;i++) a[i]=(int)cpuTime.arr[count++]; a[8]=(a[1]+a[2]+a[3]+a[4]+a[5]+a[6]+a[7])/7; printf("鏈表存儲\t\t%d\t%d\t%d\t%d\t%d\t%d\t%d\n",a[1],a[2],a[3],a[4],a[5],a[6],a[8]); for(
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度環(huán)境保護項目投標失敗環(huán)保法規(guī)與合同修訂合同4篇
- 2025年度美發(fā)店員工股權激勵與績效考核合同4篇
- 2025年度門牌制作安裝與城市品牌推廣合同4篇
- 車輛保險與事故理賠
- 遏制礦山事故《硬措施》再學習
- 安全心理學系統(tǒng)性培訓課件
- 2024年鋼筋焊接技術轉(zhuǎn)讓與合作協(xié)議
- 2025年度美容化妝品品牌形象設計及宣傳推廣合同4篇
- 2025年度海洋工程船舶交易合同4篇
- 2025年度環(huán)境整治與生態(tài)濕地恢復施工合同
- 電除顫操作流程圖
- 湖北教育出版社三年級下冊信息技術教案
- 鐵路工程主要建材碳排放因子、常用施工機械臺班能源用量、類運輸方式、能源碳排放因子、不同植栽方式綠化固碳量
- 設計基礎全套教學課件
- 藥品養(yǎng)護記錄表
- IATF16949包裝方案評審表
- 食堂服務外包投標方案(技術標)
- 綠建評分報告模板
- 1 運行方案說明
- 大骨節(jié)病專業(yè)知識講座課件
- PHILIPS HeartStart XL+操作培訓課件
評論
0/150
提交評論