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

10.5屈揃拷旺電會

屈揃拷旺電會議児云荷恬頁繍曾倖嗤會燕栽旺葎匯倖嗤會燕。

譜r[u…t]喇曾倖嗤會徨燕r[u…v-1]才r[v…t]怏撹?曾倖徨燕海業蛍艶葎v-u、t-v+1。

栽旺圭隈葎?
  1. i=u?j=v?k=u? //崔曾倖徨燕議軟兵和炎式絹廁方怏議軟兵和炎
  2. 飛i>v 賜j>t?廬? //凪嶄匯倖徨燕厮栽旺頼?曳熟僉函潤崩
  3. //僉函r[i]才r[j]購囚鷹熟弌議贋秘絹廁方怏rf
    泌惚r[i].key<r[j].key?rf[k]=r[i]? i++? k++? 廬?
    倦夸?rf[k]=r[j]? j++? k++? 廬?
  4. //繍賓隆侃尖頼議徨燕嶄圷殆贋秘rf
    泌惚i<v?繍r[i…v-1]贋秘rf[k…t] //念匯徨燕掲腎
    泌惚j<=t?繍r[i…v]贋秘rf[k…t] //朔匯徨燕掲腎
  5. 栽旺潤崩。

‐麻隈10.11/
void Merge(ElemType *r?ElemType *rf?int u?int v?int t)
{
for(i=u?j=v?k=u?i<v&&j<=t?k++)
{ if(r[i].key<r[j].key)
{ rf[k]=r[i]?i++?}
else
{ rf[k]=r[j]?j++?}
}
if(i<v) rf[k…t]=r[i…v-1]?
if(j<=t) rf[k…t]=r[j…t]?
}

匯.曾揃拷旺議亨旗麻隈


1 倖圷殆議燕悳頁嗤會議。侭參斤n 倖圷殆議棋電會双?耽倖圷殆辛心撹1 倖嗤會徨燕。斤徨燕曾曾栽旺伏撹n/2倖徨燕?侭誼徨燕茅恷朔匯倖徨燕海業辛嬬葎1 翌?凪噫徨燕海業譲葎2。壅序佩曾曾栽旺?岷欺伏撹n 倖圷殆梓購囚鷹嗤會議燕。

‐麻隈10.12/
void MergeSort(S_TBL *p?ElemType *rf)
{ /*斤*p 燕拷旺電會?*rf 葎嚥*p 燕吉海議絹廁方怏*/
ElemType *q1?*q2?
q1=rf?q2=p->elem?
for(len=1?len<p->length?len=2*len) /*貫q2 拷旺欺q1*/
{ for(i=1?i+2*len-1<=p->length?i=i+2*len)
Merge(q2?q1?i?i+len?i+2*len-1)? /*斤吉海議曾倖徨燕栽旺*/
if(i+len-1<p->length)
Merge(q2?q1?i?i+len?p->length)? /*斤音吉海議曾倖徨燕栽旺*/
else if(i<=p->length)
while(i<=p->length) /*飛珊複和匯倖徨燕?夸岷俊勧秘*/
q1[i]=q2[i]?
q1<-->q2? /*住算?參隠屬和匯緬拷旺扮?挽貫q2 拷旺欺q1*/
if(q1!=p->elem) /*飛恷嶮潤惚音壓*p 燕嶄?夸勧秘岻*/
for(i=1?i<=p->length?i++)
p->elem[i]=q1[i]?
}
}

屈.曾揃拷旺議弓拷麻隈

‐麻隈10.13/
void MSort(ElemType *p?ElemType *p1?int s?int t)
{ /*繍p[s…t]拷旺電會葎p1[s…t]*/
if(s==t) p1[s]=p[s]
else
{ m=(s+t)/2? /*峠蛍*p 燕*/
MSort(p?p2?s?m)? /*弓拷仇繍p[s…m]拷旺葎嗤會議p2[s…m]*/
MSort(p?p2?m+1?t)? /*弓拷仇繍p[m+1…t]拷旺葎嗤會議p2[m+1…t]*/
Merge(p2?p1?s?m+1?t)? /*繍p2[s…m]才p2[m+1…t]拷旺欺p1[s…t]*/
}
}
void MergeSort(S_TBL *p)
{ /*斤乏會燕*p 恬拷旺電會*/
MSort(p->elem?p->elem?1?p->length)?
}

‐丼楕蛍裂/
俶勣匯倖嚥燕吉海議絹廁圷殆方怏腎寂?侭參腎寂鹸墫業葎O(n)。

斤n 倖圷殆議燕?繍宸n 倖圷殆心恬匐潤泣?飛繍曾曾拷旺伏撹議徨燕心恬万断議幻潤泣?夸拷旺狛殻斤哘喇匐?功伏撹匯臣屈我峯議狛殻。侭參拷旺緬方埃吉噐屈我峯議互業-1?軸log2n?耽緬拷旺俶卞強芝村n 肝?絞扮寂鹸墫業葎O(nlog2n)。

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