嚴(yán)蔚敏版數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)參考答案第十章
《嚴(yán)蔚敏版數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)參考答案第十章》由會(huì)員分享,可在線(xiàn)閱讀,更多相關(guān)《嚴(yán)蔚敏版數(shù)據(jù)結(jié)構(gòu)(C語(yǔ)言版)參考答案第十章(15頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、真誠(chéng)為您提供優(yōu)質(zhì)參考資料,若有不當(dāng)之處,請(qǐng)指正。 第十章 內(nèi)部排序 10.23 void Insert_Sort1(SqList &L)//監(jiān)視哨設(shè)在高下標(biāo)端的插入排序算法 { k=L.length; for(i=k-1;i;--i) //從后向前逐個(gè)插入排序 if(L.r[i].key>L.r[i+1].key) { L.r[k+1].key=L.r[i].key; //監(jiān)視哨 for(j=i+1;L.r[j].key>L.r[i].key;++j) L.r[j-1].key=L.r[j].key; //前移 L.r[j-1].key=L.r[k+1].key
2、; //插入 } }//Insert_Sort1 10.24 void BiInsert_Sort(SqList &L)//二路插入排序的算法 { int d[MAXSIZE]; //輔助存儲(chǔ) x=L.r.key;d=x; first=1;final=1; for(i=2;i<=L.length;i++) { if(L.r[i].key>=x) //插入前部 { for(j=final;d[j]>L.r[i].key;j--) d[j+1]=d[j]; d[j+1]=L.r[i].key; final++; } else //插入后部 { for(j
3、=first;d[j] 4、].next=1;
L.r[1].next=0; //建初始循環(huán)鏈表
for(i=2;i<=L.length;i++) //逐個(gè)插入
{
p=0;x=L.r[i].key;
while(L.r[L.r[p].next].key 5、xt;
if(p!=i)
{
L.r[p]<->L.r[i];
L.r[i].next=p;
}
p=q;
}//for
}//SLInsert_Sort
10.26
void Bubble_Sort1(int a[ ],int n)//對(duì)包含n個(gè)元素的數(shù)組a進(jìn)行改進(jìn)的冒泡排序
{
change=n-1; //change指示上一趟冒泡中最后發(fā)生交換的元素
while(change)
{
for(c=0,i=0;i 6、素
}
change=c;
}//while
}//Bubble_Sort1
10.27
void Bubble_Sort2(int a[ ],int n)//相鄰兩趟是反方向起泡的冒泡排序算法
{
low=0;high=n-1; //冒泡的上下界
change=1;
while(low 7、;i--) //從下向上起泡
if(a[i]a[i-1];
change=1;
}
low++; //修改下界
}//while
}//Bubble_Sort2
10.28
void Bubble_Sort3(int a[ ],int n)//對(duì)上一題的算法進(jìn)行化簡(jiǎn),循環(huán)體中只包含一次冒泡
{
int b[ 3 ]; //b[0]為冒泡的下界,b[ 2 ]為上界,b[1]無(wú)用
d=1;b[0]=0;b[ 2 ]=n-1; //d為冒泡方向的標(biāo)識(shí),1為向上,-1為向下
change=1;
while(b[0]
8、change)
{
change=0;
for(i=b[1-d];i!=b[1+d];i+=d) //統(tǒng)一的冒泡算法
if((a[i]-a[i+d])*d>0) //注意這個(gè)交換條件
{
a[i]<->a[i+d];
change=1;
}
b[1+d]-=d; //修改邊界
d*=-1; //換個(gè)方向
}//while
}//Bubble_Sort3
10.29
void OE_Sort(int a[ ],int n)//奇偶交換排序的算法
{
change=1;
while(change)
{
change=0;
for(i=1;i 9、+=2) //對(duì)所有奇數(shù)進(jìn)行一趟比較
if(a[i]>a[i+1])
{
a[i]<->a[i+1];
change=1;
}
for(i=0;i 10、t_NotRecurve(int SQList &L)//快速排序的非遞歸算法
{
low=1;high=L.length;
InitStack(S); //S的元素為boundary類(lèi)型
while(low 11、vot-1; //短的子序列留待下次排序
}
else
{
Push(S,{low,pivot-1});
low=pivot+1;
}
}//if
else if(low 12、/QSort_NotRecurve
int Partition(SQList &L,int low,int high)//一趟劃分的算法,與書(shū)上相同
{
L.r[0]=L.r[low];
pivotkey=L.r[low].key;
while(low 13、ow]=L.r[0];
return low;
}//Partition
void Easy_Sort(SQList &L,int low,int high)//對(duì)長(zhǎng)度小于3的子序列進(jìn)行比較排序
{
if(high-low==1) //子序列只含兩個(gè)元素
if(L.r[low].key>L.r[high].key) L.r[low]<->L.r[high];
else //子序列含有三個(gè)元素
{
if(L.r[low].key>L.r[low+1].key) L.r[low]<->L.r[low+1];
if(L.r[low+1].key>L.r[high].key) L 14、.r[low+1]<->L.r[high];
if(L.r[low].key>L.r[low+1].key) L.r[low]<->L.r[low+1];
}
}//Easy_Sort
10.31
void Divide(int a[ ],int n)//把數(shù)組a中所有值為負(fù)的記錄調(diào)到非負(fù)的記錄之前
{
low=0;high=n-1;
while(low 15、;
a[low]<->a[high];
}
}//Divide
10.32
typedef enum {RED,WHITE,BLUE} color; //三種顏色
void Flag_Arrange(color a[ ],int n)//把由三種顏色組成的序列重排為按照紅,白,藍(lán)的順序排列
{
i=0;j=0;k=n-1;
while(j<=k)
switch(a[j])
{
case RED:
a[i]<->a[j];
i++;
j++;
break;
case WHITE:
j++;
break;
case BLUE:
a[j]<->a[k] 16、;
k--; //這里沒(méi)有j++;語(yǔ)句是為了防止交換后a[j]仍為藍(lán)色的情況
}
}//Flag_Arrange
分析:這個(gè)算法中設(shè)立了三個(gè)指針.其中,j表示當(dāng)前元素;i以前的元素全部為紅色;k以后的元素全部為藍(lán)色.這樣,就可以根據(jù)j的顏色,把其交換到序列的前部或者后部.
10.33
void LinkedList_Select_Sort(LinkedList &L)//單鏈表上的簡(jiǎn)單選擇排序算法
{
for(p=L;p->next->next;p=p->next)
{
q=p->next;x=q->data;
for(r=q,s=q;r->next;r=r->nex 17、t) //在q后面尋找元素值最小的結(jié)點(diǎn)
if(r->next->data 18、個(gè)插入建堆的算法
{
for(i=2;i 19、.length;i>1;i--)
{
H.r[1]<->H.r[i];
Heap_Adjust(H,1,i-1);
}
}//TriHeap_Sort
void Heap_Adjust(Heap &H,int s,int m)//順序表H中,H.r[s+1]到H.r[m]已經(jīng)是堆,把H.r[s]插入并調(diào)整成堆
{
rc=H.r[s];
for(j=3*s-1;j<=m;j=3*j-1)
{
if(j 20、;
s=j;
}
H.r[s]=rc;
}//Heap_Adjust
分析:本算法與課本上的堆排序算法相比,只有兩處改動(dòng):1.建初始堆時(shí),i的上限從H.length/3開(kāi)始(為什么?) 2.調(diào)整堆的時(shí)候,要從結(jié)點(diǎn)的三個(gè)孩子結(jié)點(diǎn)中選擇最大的那一個(gè),最左邊的孩子的序號(hào)的計(jì)算公式為j=3*s-1(為什么?)
10.36
void Merge_Sort(int a[ ],int n)//歸并排序的非遞歸算法
{
for(l=1;l 21、i; //求出待歸并的兩段的上下界
end1=start1+l-1;
start2=end1+1;
end2=(start2+l-1)>(n-1)?(n-1):(start2+l-1);//注意end2可能超出邊界
Merge(a,start1,end1,start2,end2); //歸并
}
}//Merge_Sort
void Merge(int a[ ],int s1,int e1,int s2,int e2)//將有序子序列a[s1]到a[e1]和a[s2]到a[e2]歸并為有序序列a[s1]到a[e2]
{
int b[MAXSIZE]; //設(shè)立輔助存儲(chǔ)數(shù)組b
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 川渝旅游日記成都重慶城市介紹推薦景點(diǎn)美食推薦
- XX國(guó)有企業(yè)黨委書(shū)記個(gè)人述責(zé)述廉報(bào)告及2025年重點(diǎn)工作計(jì)劃
- 世界濕地日濕地的含義及價(jià)值
- 20XX年春節(jié)節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)人到場(chǎng)心到崗
- 大唐女子圖鑒唐朝服飾之美器物之美繪畫(huà)之美生活之美
- 節(jié)后開(kāi)工第一課輕松掌握各要點(diǎn)節(jié)后常見(jiàn)的八大危險(xiǎn)
- 廈門(mén)城市旅游介紹廈門(mén)景點(diǎn)介紹廈門(mén)美食展示
- 節(jié)后開(kāi)工第一課復(fù)工復(fù)產(chǎn)十注意節(jié)后復(fù)工十檢查
- 傳統(tǒng)文化百善孝為先孝道培訓(xùn)
- 深圳城市旅游介紹景點(diǎn)推薦美食探索
- 節(jié)后復(fù)工安全生產(chǎn)培訓(xùn)勿忘安全本心人人講安全個(gè)個(gè)會(huì)應(yīng)急
- 預(yù)防性維修管理
- 常見(jiàn)閥門(mén)類(lèi)型及特點(diǎn)
- 設(shè)備預(yù)防性維修
- 2.乳化液泵工理論考試試題含答案