遍匈 / 方象潤更 / 噴、電會 /

10.4僉夲電會!均電會(Heap Sort)

譜嗤n 倖圷殆議會双k1?k2?…?kn?輝拝叙輝諾怎和峰購狼岻匯扮?各岻葎均。
飛參匯略方怏贋刈匯倖均?夸均斤哘匯臣頼畠屈我峯?拝侭嗤掲匐潤泣議峙譲音寄噐(賜音弌噐)凪徨溺議峙?功潤泣議峙頁恷弌(賜恷寄)議。

譜嗤n 倖圷殆?繍凪梓購囚鷹電會。遍枠繍宸n 倖圷殆梓購囚鷹秀撹均?繍均競圷殆補竃?誼欺n 倖圷殆嶄購囚鷹恷弌(賜恷寄)議圷殆。隼朔?壅斤複和議n-1 倖圷殆秀撹均?補竃均競圷殆?誼欺n 倖圷殆嶄購囚鷹肝弌(賜肝寄)議圷殆。泌緩郡鹸?宴誼欺匯倖梓購囚鷹嗤會議會双。各宸倖狛殻葎均電會。

咀緩?糞孖均電會俶盾畳曾倖諒籾?
1. 泌採繍n 倖圷殆議會双梓購囚鷹秀撹均?
2. 補竃均競圷殆朔?奕劔距屁複噫n-1 倖圷殆?聞凪梓購囚鷹撹葎匯倖仟均。

遍枠?網胎補竃均競圷殆朔?斤複噫圷殆嶷仟秀撹均議距屁狛殻。
距屁圭隈?譜嗤m 倖圷殆議均?補竃均競圷殆朔?複和m-1 倖圷殆。繍均久圷殆僕秘均競?均瓜篤撒?凪圻咀叙頁功潤泣音諾怎均議來嵎。繍功潤泣嚥恣、嘔徨溺嶄熟弌(賜弌寄)議序佩住算。飛嚥恣徨溺住算?夸恣徨峯均瓜篤撒?拝叙恣徨峯議功潤泣音諾怎均議來嵎?飛嚥嘔徨溺住算?夸嘔徨峯均瓜篤撒?拝叙嘔徨峯議功潤泣音諾怎均議來嵎。写偬斤音諾怎均來嵎議徨峯序佩貧峰住算荷恬?岷欺匐徨潤泣?均瓜秀撹。各宸倖徭功潤泣欺匐徨潤泣議距屁狛殻葎標僉。

‐箭10.6/ 壅網胎斤n 倖圷殆兜兵秀均議狛殻。

秀均圭隈?斤兜兵會双秀均議狛殻?祥頁匯倖郡鹸序佩標僉議狛殻。n 倖潤泣議頼畠屈我峯?夸恷朔匯倖潤泣頁及倖潤泣議徨溺。斤及倖潤泣葎功議徨峯標僉?徨峯撹葎均?岻朔?念卆肝斤光潤泣葎功議徨峯序佩標僉?聞岻撹葎均?岷欺功潤泣。

‐箭10.7/
均電會?斤n 倖圷殆議會双序佩均電會?枠繍凪秀撹均?參功潤泣嚥及n 倖潤泣住算?
距屁念n-1 倖潤泣撹葎均?壅參功潤泣嚥及n-1 倖潤泣住算?嶷鹸貧峰荷恬?岷欺屁倖會双嗤會。

‐麻隈10.10/
void HeapAdjust(S_TBL *h?int s?int m)
{/*r[s…m]嶄議芝村購囚鷹茅r[s]翌譲諾怎均議協吶?云痕方繍斤及s 倖潤泣葎功議徨峯標僉?聞凪撹葎寄競均*/
rc=h->r[s]?
for(j=2*s?j<=m?j=j*2) /* 冽購囚鷹熟寄議徨溺潤泣?和標僉*/
{ if(j<m&&h->r[j].key<h->r[j+1].key)
j=j+1? /* 葎購囚鷹熟寄議圷殆和炎*/
if(rc.key<h->r[j].key) break? /* rc 哘峨秘壓了崔s 貧*/
h->r[s]=h->r[j]? s=j? /* 聞s 潤泣諾怎均協吶*/
}
h->r[s]=rc? /* 峨秘*/
}
void HeapSort(S_TBL *h)
{ for(i=h->length/2?i>0?i--) /* 繍r[1..length]秀撹均*/
HeapAdjust(h?i?h->length)?
for(i=h->length?i>1?i--)
{ h->r[1]<-->h->r[i]? /* 均競嚥均詰圷殆住算*/
HeapAdjust(h?1?i-1)? /*繍r[1..i-1]嶷仟距屁葎均*/
}
}
‐丼楕蛍裂/
譜峯互葎k?貫功欺匐議標僉?購囚鷹曳熟肝方崛謹2(k-1)肝?住算芝村崛謹k 肝。侭參?壓秀挫均朔?電會狛殻嶄議標僉肝方音階狛和塀?
2( ⎣log2(n−1)⎦ + ⎣log2(n−2)⎦ + … + log22⎦ ) < 2nlog2n
遇秀均扮議曳熟肝方音階狛4n 肝?咀緩均電會恷撒秤趨和?扮寂鹸墫業匆葎O(nlog2n)。

AltStyle によって変換されたページ (->オリジナル) /