




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
本文格式為Word版,下載可任意編輯——《數(shù)據(jù)結(jié)構(gòu)》內(nèi)部排序12種算法上機(jī)試驗(yàn)報(bào)告
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
成都信息工程學(xué)院計(jì)算機(jī)系
課程試驗(yàn)報(bào)告
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
(說(shuō)明:試驗(yàn)報(bào)告必需包含下面的每項(xiàng)內(nèi)容,根據(jù)試驗(yàn)狀況認(rèn)真填寫(xiě),封面必需打印或復(fù)?。ˋ4紙),書(shū)寫(xiě)上機(jī)試驗(yàn)報(bào)告內(nèi)容的紙張也用A4紙,最終從側(cè)面裝訂)
一
目的:從鍵盤(pán)輸入一組數(shù),通過(guò)內(nèi)部排序的
12種算法對(duì)這組數(shù)字進(jìn)行排序。熟練把握剛
剛學(xué)過(guò)的內(nèi)部排序的算法,并對(duì)這12種排序算法的時(shí)間繁雜度進(jìn)行比較,根據(jù)不同的狀況,選擇適合的算法
二
PC機(jī)每人1臺(tái)
三
實(shí)現(xiàn)內(nèi)部排序的12種排序算法的全排序。
四(注:可打?。?/p>
(用傳統(tǒng)流程圖的形式表示)
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
五
(記錄下你調(diào)試程序中出現(xiàn)的錯(cuò)誤信息的英文提醒,分析出錯(cuò)原因及可能的解決方法)
六(注:源程序可打?。?/p>
(同時(shí)記錄下你對(duì)你編寫(xiě)此程序的其它具體想法,)主要的程序:
/********************************直接插入排序***************************/voidInsertSort(SqListL){//直接插入排序inti,j;for(i=2;i=L.length;++i){
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
{//依次將L的第2個(gè)~最終1個(gè)記錄插入d中if(L.r[i].keyd[first].key){//待插記錄小于d中最小值,插到d[first]之前(不需移動(dòng)d數(shù)組的元素)first=(first-1+L.length)%L.length;//設(shè)d為循環(huán)向量d[first]=L.r[i];}elseif(L.r[i].keyd[final].key){//待插記錄大于d中最大值,插到d[final]之后(不需移動(dòng)d數(shù)組的元素)final=final+1;d[final]=L.r[i];}else{//待插記錄大于d中最小值,小于d中最大值,插到d的中間(需要移動(dòng)d數(shù)組的元素)j=final++;//移動(dòng)d的尾部元素以便按序插入記錄while(L.r[i].keyd[j].key){d[(j+1)%L.length]=d[j];j=(j-1+L.length)%L.length;}d[j+1]=L.r[i];}}for(i=1;i=L.length;i++)//把d賦給L.rL.r[i]=d[(i+first-1)%L.length];//線性關(guān)系}
/***************************************希爾排序***************************/voidShellInsert(SqListL,intdk){
//printf(OK);inti,j;for(i=dk+1;i=L.length;i++)if(L.r[i].keyL.r[i-dk].key){L.r[0]=L.r[i];for(j=i-dk;j0(L.r[0].keyL.r[j].key);j=j-dk)L.r[j+dk]=L.r[j];L.r[j+dk]=L.r[0];}}
voidShellSort(SqListL,intdlta[],intt){
//printf(OK);
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
intk;for(k=0;kt;++k)ShellInsert(L,dlta[k]);//display(L);}
/***********************************表插入排序***********************/voidTableInsert(SLinkListTypeSL,RedTypeD[]){//由數(shù)組D建立的n個(gè)元素的表插入排序的靜態(tài)鏈表SLinti,p,q;SL.r[0].rc.key=INT_MAX;//表頭結(jié)點(diǎn)記錄的關(guān)鍵字取得最大整數(shù)(非降序表的表尾)SL.r[0].next=0;//next域?yàn)?表示表尾(現(xiàn)為空表,初始化)for(i=0;iMAXSIZE;i++){SL.r[i+1].rc=D[i];//將數(shù)組D的值賦給靜態(tài)鏈表SLq=0;p=SL.r[0].next;while(SL.r[p].rc.key=SL.r[i+1].rc.key){//靜態(tài)鏈表后移q=p;p=SL.r[p].next;}SL.r[i+1].next=p;SL.r[q].next=i+1;//將當(dāng)前記錄插入到靜態(tài)鏈表}SL.length=MAXSIZE;}
voidArrange(SLinkListTypeSL){
//根據(jù)靜態(tài)鏈表SL中各結(jié)點(diǎn)的指針值調(diào)整記錄位置,使得SL中記錄按關(guān)鍵字非遞減有序排列inti,p,q;SLNodet;p=SL.r[0].next;//p指示第一個(gè)記錄的當(dāng)前位置printf(%d,SL.length);for(i=1;iSL.length;i++){//SL.r[i...i-1]中記錄已按關(guān)鍵字有序排列,第i個(gè)記錄在SL中的當(dāng)前記錄不應(yīng)小于iwhile(pi)p=SL.r[p].next;//找到第i個(gè)記錄,并用p指示其在SL中當(dāng)前位置q=SL.r[p].next;//q指示當(dāng)前未調(diào)整的表尾if(p!=i){t=SL.r[p];//交換記錄,使第i個(gè)記錄到位SL.r[p]=SL.r[i];
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
SL.r[i]=t;SL.r[i].next=p;//指向被移走的記錄,使得以后可由while循環(huán)找回}p=q;//p指示未調(diào)整的表尾,為找到第i+1個(gè)記錄作準(zhǔn)備//print(SL);//printf(\n);}}
/*************************************冒泡排序***********************/voidbubble_sort(SqListL){//冒泡排序inti;intk;RedTypetem;for(i=L.length-1,k=1;i=1k;--i){k=0;for(intj=1;j=i;++j){if(L.r[j].keyL.r[j+1].key){tem=L.r[j];L.r[j]=L.r[j+1];L.r[j+1]=tem;k=1;}}}}
/************************************快速排序**************************/
intPartition(SqListL,intlow,inthigh){//快速排序遞歸函數(shù)的實(shí)現(xiàn)intpivotkey;L.r[0]=L.r[low];pivotkey=L.r[low].key;while(lowhigh){while(lowhighL.r[high].key=pivotkey)--high;L.r[low]=L.r[high];while(lowhighL.r[low].key=pivotkey)
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
L.r[high]=L.r[low];}L.r[low]=L.r[0];returnlow;}
/********************************簡(jiǎn)單項(xiàng)選擇擇排序***********************/intSelectMinKey(SqListL,inti){intj,k=i;for(j=i+1;jL.length;j++){if(L.r[k].keyL.r[j].key)k=j;}returnk;}
voidSelect_Sort(SqListL){inti,j;RedTypetem;for(i=1;iL.length;i++){j=SelectMinKey(L,i);if(i!=j){tem=L.r[i];L.r[i]=L.r[j];L.r[j]=tem;}}}
/**************************************堆排序*************************/
voidHeapAdjust(HeadTypeL,ints,intm){//對(duì)生成的堆進(jìn)行排序,生成大頂堆RedTyperc;rc=L.r[s];intj;for(j=2*s;j=m;j*=2){if(jm(L.r[j].keyL.r[j+1].key))
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
if(rc.key=L.r[j].key)break;L.r[s]=L.r[j];s=j;}L.r[s]=rc;}
voidHeadSort(HeadTypeL)
{//對(duì)一組無(wú)序的數(shù)字進(jìn)行排序生成堆inti;RedTypetemp;for(i=L.length/2;i0;--i)HeapAdjust(L,i,L.length);for(i=L.length;i1;--i){temp=L.r[1];L.r[1]=L.r[i];L.r[i]=temp;HeapAdjust(L,1,i-1);}}
/**************************************歸并排序***************************/voidMerge(RedTypeSR[],RedTypeTR[],ints,intm,intt){//printf(+_+_+_+_+_+_);inti,j,k;
//RcdType*tem;for(j=m+1,k=s,i=s;i=mj=t;k++){if(SR[i].keySR[j].key)TR[k]=SR[i++];elseTR[k]=SR[j++];}while(i=m){//for(l=0;lm-1;l++,k++,i++)TR[k++]=SR[i++];}while(j=t){//for(l=0;ln-j;l++,k++,j++)
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
TR[k++]=SR[j++];}}
voidMSort(RedTypeSR[],RedTypeTR1[],ints,intt){intm;RedTypeTR2[MAXSIZE+1];if(s==t)TR1[s]=SR[s];else{m=(s+t)/2;MSort(SR,TR2,s,m);MSort(SR,TR2,m+1,t);Merge(TR2,TR1,s,m,t);}}
voidMergeSort(SqListL){MSort(L.r,L.r,1,L.length);}
/************************************基數(shù)排序*************************/
oidInitList(SLListL,RedTypeD[],intn)//初始化靜態(tài)鏈表L(把數(shù)組D中的數(shù)據(jù)存于L中){charc[MAX_NUM_OF_KEY],c1[MAX_NUM_OF_KEY];inti,j,max=D[0].key;//max為關(guān)鍵字的最大值for(i=1;in;i++)if(maxD[i].key)
max=D[i].key;L.keynum=int(ceil(log10(max)));L.recnum=n;for(i=1;i=n;i++){L.r[i].otheritems=D[i-1].otherinfo;itoa(D[i-1].key,c,10);//將10進(jìn)制整型轉(zhuǎn)化為字符型,存入cfor(j=strlen(c);jL.keynum;j++)//若c的長(zhǎng)度max的位數(shù),在c前補(bǔ)'0'{strcpy(c1,0);strcat(c1,c);strcpy(c,c1);}
for(j=0;jL.keynum;j++)L.r[i].keys[j]=c[L.keynum-1-j];
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
}
voidDistribute(SLCellr[],inti,ArrTypef,ArrTypee)//算法10.15
{//靜態(tài)鍵表L的r域中記錄已按(keys[0],,keys[i-1])有序。本算法按
//第i個(gè)關(guān)鍵字keys[i]建立RADIX個(gè)子表,使同一子表中記錄的keys[i]一致。//f[0..RADIX-1]和e[0..RADIX-1]分別指向各子表中第一個(gè)和最終一個(gè)記錄intj,p;
for(j=0;jRADIX;++j)f[j]=0;//各子表初始化為空表for(p=r[0].next;p;p=r[p].next){j=r[p].keys[i]-'0';//將記錄中第i個(gè)關(guān)鍵字映射到[0..RADIX-1]if(!f[j])f[j]=p;elser[e[j]].next=p;e[j]=p;//將p所指的結(jié)點(diǎn)插入第j個(gè)子表中}}
voidCollect(SLCellr[],ArrTypef,ArrTypee)//算法10.16
//本算法按keys[i]自小至大地將f[0..RADIX-1]所指各子表依次鏈接成//一個(gè)鏈表,e[0..RADIX-1]為各子表的尾指針。{intj,t;
for(j=0;!f[j];j=++j);//找第一個(gè)非空子表r[0].next=f[j];
t=e[j];//r[0].next指向第一個(gè)非空子表中第一個(gè)結(jié)點(diǎn)while(jRADIX-1)
{for(j=++j;jRADIX-1!f[j];j=++j);//找下一個(gè)非空子表if(f[j])//鏈接兩個(gè)非空子表{r[t].next=f[j];t=e[j];}}
r[t].next=0;//t指向最終一個(gè)非空子表中的最終一個(gè)結(jié)點(diǎn)}
voidprintl(SLListL)//按鏈表輸出靜態(tài)鏈表{inti=L.r[0].next,j;while(i)
{for(j=L.keynum-1;j=0;j--)printf(%c,L.r[i].keys[j]);printf();i=L.r[i].next;}
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
voidRadixSort(SLListL)//算法10.17
//L是采用靜態(tài)鏈表表示的順序表。對(duì)L作基數(shù)排序,使得L成為按關(guān)鍵字//自小到大的有序靜態(tài)鏈表,L.r[0]為頭結(jié)點(diǎn)。{inti;
ArrTypef,e;
for(i=0;iL.recnum;++i)L.r[i].next=i+1;L.r[L.recnum].next=0;//將L改造為靜態(tài)鏈表
for(i=0;iL.keynum;++i)//按最低位優(yōu)先依次對(duì)各關(guān)鍵字進(jìn)行分派和收集{Distribute(L.r,i,f,e);//第i趟分派Collect(L.r,f,e);//第i趟收集
printf(第%d趟收集后:\n,i+1);printl(L);printf(\n);}}
voidprint(SLListL)//按數(shù)組序號(hào)輸出靜態(tài)鏈表{inti,j;
printf(keynum=%drecnum=%d\n,L.keynum,L.recnum);for(i=1;i=L.recnum;i++){printf(keys=);
for(j=L.keynum-1;j=0;j--)printf(%c,L.r[i].keys[j]);
printf(otheritems=%dnext=%d\n,L.r[i].otheritems,L.r[i].next);}}
voidSort(SLListL,intadr[])//改此句(類型)
//求得adr[1..L.length],adr[i]為靜態(tài)鏈表L的第i個(gè)最小記錄的序號(hào){inti=1,p=L.r[0].next;while(p)
{adr[i++]=p;p=L.r[p].next;}}
voidRearrange(SLListL,intadr[])//改此句(類型)
//adr給出靜態(tài)鏈表L的有序次序,即L.r[adr[i]]是第i小的記錄。//本算法按adr重排L.r,使其有序。算法10.18(L的類型有變){inti,j,k;
for(i=1;iL.recnum;++i)//改此句(類型)if(adr[i]!=i){j=i;
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
L.r[0]=L.r[i];//暫存記錄L.r[i]
while(adr[j]!=i)//調(diào)整L.r[adr[j]]的記錄到位直到adr[j]=i為止{k=adr[j];L.r[j]=L.r[k];adr[j]=j;
j=k;//記錄按序到位}
L.r[j]=L.r[0];adr[j]=j;}}
運(yùn)行效果圖:
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
14/16
內(nèi)部排序12種算法的經(jīng)典語(yǔ)句,十分詳細(xì)。
七
(在上機(jī)試驗(yàn)中遇到的你不能解決的其它問(wèn)題,簡(jiǎn)單描述一下你此次上機(jī)的收獲及感想)
心得:
排序時(shí)計(jì)算機(jī)程序設(shè)計(jì)中的一種重要的操作,由于我們無(wú)論做什么樣的程序都會(huì)涉及到排序算法,在第十章的內(nèi)部排序算法中,基本上都是一些經(jīng)典的排序算法,這是我選擇這個(gè)題目的主要原因,由于通過(guò)這個(gè)綜合設(shè)計(jì),我可以了解不
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 新藥注冊(cè)咨詢企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 高效香皂自動(dòng)化生產(chǎn)線企業(yè)制定與實(shí)施新質(zhì)生產(chǎn)力戰(zhàn)略研究報(bào)告
- 環(huán)保塑料垃圾桶設(shè)計(jì)行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 國(guó)際會(huì)議展覽中心行業(yè)深度調(diào)研及發(fā)展戰(zhàn)略咨詢報(bào)告
- 中國(guó)抗高血壓用藥行業(yè)市場(chǎng)現(xiàn)狀、發(fā)展歷程、產(chǎn)業(yè)鏈知識(shí)圖譜及未來(lái)發(fā)展趨勢(shì)預(yù)測(cè)報(bào)告
- 織制毛毯工藝品企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 食物份數(shù)盤(pán)企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 繪畫(huà)畫(huà)架批發(fā)企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 醫(yī)療器械融資租賃企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 自動(dòng)化貼補(bǔ)強(qiáng)機(jī)相關(guān)行業(yè)投資規(guī)劃報(bào)告
- DB11-Z361-2006應(yīng)急系統(tǒng)信息化技術(shù)要求
- 新高考普通高中數(shù)學(xué)人教A版教材目錄
- 心臟介入診療技術(shù)操作規(guī)范及流程
- 《影視鑒賞(第二版)》課件2-2故事片畫(huà)面
- 第八章:微生物的生態(tài)
- Q∕GDW 12070-2020 配電網(wǎng)工程標(biāo)準(zhǔn)化設(shè)計(jì)圖元規(guī)范
- 《定期定額納稅申報(bào)表》
- 【告知牌】某公司全套重大危險(xiǎn)源告知牌(7頁(yè))
- 【課件】第十四單元第二十七節(jié)肖邦課件-2021-2022學(xué)年高中音樂(lè)人音版(2019)必修音樂(lè)鑒賞
- 贏時(shí)勝財(cái)務(wù)估值系統(tǒng)日常操作指引
- NB_T 10333-2019《水電工程場(chǎng)內(nèi)交通道路設(shè)計(jì)規(guī)范》_(高清最新)
評(píng)論
0/150
提交評(píng)論