рдЕрдиреБрд╡рд╛рджрдХ рд╕реЗ: рдпрд╣ рдкрд╛рда рдорд╛рдореВрд▓реА "рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд░реВрдк рд╕реЗ" рдЪрдмрд╛рдиреЗ рд╡рд╛рд▓реА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕реНрдерд╛рдиреЛрдВ рдХреЗ рдХрд╛рд░рдг рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдЦрдХ рд╕рд╣реА рдЪреЗрддрд╛рд╡рдиреА рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рд╡рд┐рд╖рдп рдкрд╛рдардХ рдХреЛ рдмрд╣реБрдд рд╕рд░рд▓ рдпрд╛ рдкреНрд░рд╕рд┐рджреНрдз рд▓рдЧ рд╕рдХрддреЗ рд╣реИрдВред рдлрд┐рд░ рднреА, рдореЗрд░реЗ рд▓рд┐рдП рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗ рдЗрд╕ рдкрд╛рда рдиреЗ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдореМрдЬреВрджрд╛ рдЬреНрдЮрд╛рди рдХреЛ рдХрд╛рд░рдЧрд░ рдмрдирд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ред
рдореВрд▓ рд▓реЗрдЦ рдХреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рдХрд╛рд░рдг, рдореИрдВрдиреЗ рдЗрд╕реЗ рднрд╛рдЧреЛрдВ рдореЗрдВ рддреЛрдбрд╝ рджрд┐рдпрд╛, рдЬрд┐рд╕рдореЗрдВ рд╕реЗ рдХреБрд▓ рдЪрд╛рд░ рд╣реЛрдВрдЧреЗред
рдореИрдВ (рд╣рдореЗрд╢рд╛ рдХреА рддрд░рд╣) рдЕрдиреБрд╡рд╛рдж рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдкрд░ рдкреАрдПрдо рдХреА рдХрд┐рд╕реА рднреА рдЯрд┐рдкреНрдкрдгреА рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛редрдкрд╣рд▓реЗ рдкреНрд░рдХрд╛рд╢рд┐рдд:
рднрд╛рдЧ 1рднрд╛рдЧ реирднрд╛рдЧ рейрдЗрд╖реНрдЯрддрдо рдЫрдБрдЯрд╛рдИ
рдмрдзрд╛рдИ! рдЕрдм рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрд╕рдордорд┐рдд рдЕрдиреБрдорд╛рди рдФрд░ рд╕рдВрдХреЗрддрди "рдмрд┐рдЧ-рдУ" рдХреНрдпрд╛ рд╣реИред рдЖрдк рдпрд╣ рднреА рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рд╣реИ рдХрд┐ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛
O( 1 )
,
O( log( n ) )
,
O( n )
,
O( n
2 )
рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╣реИред рдЖрдк
o
,
o
, familiar,
╬Ш
,
╬Ш
рдФрд░ "рд╕рдмрд╕реЗ рдЦрд░рд╛рдм рд╕реНрдерд┐рддрд┐" рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВред рдпрджрд┐ рдЖрдк рдЗрд╕ рдЬрдЧрд╣ рдкрд░ рдЖрддреЗ рд╣реИрдВ, рддреЛ рдореЗрд░реЗ рд▓реЗрдЦ рдиреЗ рдкрд╣рд▓реЗ рд╣реА рдЕрдкрдирд╛ рдХрд╛рдо рдкреВрд░рд╛ рдХрд░ рд▓рд┐рдпрд╛ рд╣реИред
рдпрд╣ рдЕрдВрддрд┐рдо рдЦрдВрдб рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдпрд╣ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рдЗрд╕реЗ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЖрдкрдХреЛ рдХреБрдЫ рд╕рдордп рд╣рд▓ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЕрднреНрдпрд╛рд╕реЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдФрд░ рдЦрд░реНрдЪ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЙрдкрдпреЛрдЧреА рдФрд░ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХрд╛ рднреА рдпрд╣рд╛рдВ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИред
рд╣рдордиреЗ рдЫрдБрдЯрд╛рдИ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЛ рдЪрдпрди рдЫрдБрдЯрд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдЗрд╖реНрдЯрддрдо рдирд╣реАрдВ рд╣реИред
рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╡рд╣ рд╣реИ рдЬреЛ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫреЗ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ рдХрд┐ рдХреЛрдИ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдмреЗрд╣рддрд░ рдХрд░рддрд╛ рд╣реИред рдпрд╛рдиреА рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдиреНрдп рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдореЗрдВ рд╕рдорд╛рди рдпрд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рд╣реИред рдПрдХ рд╣реА рдЬрдЯрд┐рд▓рддрд╛ рд╡рд╛рд▓реЗ рдЗрд╖реНрдЯрддрдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдПрдХ рдЯрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдПрдХ рд╣реА рдЫрдБрдЯрд╛рдИ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХрдИ рдорд╛рдпрдиреЛрдВ рдореЗрдВ рдмреЗрд╣рддрд░ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдо рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдХреЗ рд╕рдорд╛рди рддреНрд╡рд░рд┐рдд рдЫрдБрдЯрд╛рдИ рдХреЗ рд▓рд┐рдП рдПрдХ рд╣реА рд╡рд┐рдЪрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЛ
рдорд░реНрдЬ рд╕реЙрд░реНрдЯ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдорд░реНрдЬ рдкреНрд░рдХрд╛рд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░реЗрдВ, рд╣рдореЗрдВ рдПрдХ рд╕рд╣рд╛рдпрдХ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЗрд╕реЗ
merge
рдХрд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЗрд╕реЗ рджреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рд▓реЗрдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдПрдХ (рднреА рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЧрдП) рдореЗрдВ рд╕рдВрдпреЛрдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдпрд╣ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ:
def merge( A, B ): if empty( A ): return B if empty( B ): return A if A[ 0 ] < B[ 0 ]: return concat( A[ 0 ], merge( A[ 1...A_n ], B ) ) else: return concat( B[ 0 ], merge( A, B[ 1...B_n ] ) )
concat
рдлрд╝рдВрдХреНрд╢рди рдПрдХ рддрддреНрд╡ ("рд╣реЗрдб") рдФрд░ рдПрдХ рдПрд░реЗ ("рдЯреЗрд▓") рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХреЙрдиреНрдХреИрдЯ рдХрд░рддрд╛ рд╣реИ, рд╢реЗрд╖ рдПрд▓рд┐рдореЗрдВрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ "рд╣реЗрдб" рдкрд╣рд▓реЗ рддрддреНрд╡ рдФрд░ рдПрдХ "рдЯреЗрд▓" рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдирдпрд╛ рдПрд░реЗ рджреЗрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
concat( 3, [ 4, 5, 6 ] )
[ 3, 4, 5, 6 ]
рд╡рд╛рдкрд╕ рдЖрдПрдЧрд╛ред рд╣рдо рдХреНрд░рдорд╢рдГ
A
рдФрд░
B
рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
A_n
рдФрд░
B_n
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рд╡реНрдпрд╛рдпрд╛рдо 8рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рдлрд╝рдВрдХреНрд╢рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рд▓рдп рдХрд░ рджреЗрддрд╛ рд╣реИред рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рдмрдЬрд╛рдп рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ (рд▓реВрдк рдХреЗ рд▓рд┐рдП) рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЕрдкрдиреА рдкрд╕рдВрджреАрджрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ рдореЗрдВ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦреЗрдВред
рдЗрд╕ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рдХрд╛ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп
╬Ш( n )
, рдЬрд╣рд╛рдВ
n
рдкрд░рд┐рдгрд╛рдореА рд╕рд░рдгреА рдХреА рд▓рдВрдмрд╛рдИ (
n = A_n + B_n
) рд╣реИред
рд╡реНрдпрд╛рдпрд╛рдо репрдЬрд╛рдВрдЪреЗрдВ рдХрд┐ merge
рд░рди рдЯрд╛рдЗрдо run ╬Ш( n )
ред
рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рд╣рдо рдПрдХ рдмреЗрд╣рддрд░ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ: рд╣рдо рд╕рд░рдгреА рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЛ рдкреБрди: рдХреНрд░рдордмрджреНрдз рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рджреЛ рдХреНрд░рдордмрджреНрдз рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдПрдХ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВред рдЫрджреНрдо рдХреЛрдб:
def mergeSort( A, n ): if n = 1: return A
рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдкрд┐рдЫрд▓реЗ рд╡рд╛рд▓реЗ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╕рдордЭрдирд╛ рдХрдард┐рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд▓рд╛ рдЕрднреНрдпрд╛рд╕ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИред
рд╡реНрдпрд╛рдпрд╛рдо резрежрд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ mergeSort
рд╕рд╣реА рд╣реИ (рдпрд╛рдиреА рдЬрд╛рдБрдЪ рд▓реЗрдВ рдХрд┐ рдпрд╣ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЙрд╕ рдкрд░ рджрд┐рдП рдЧрдП рд╕рд░рдгреА рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ)ред рдпрджрд┐ рдЖрдк рд╕рдордЭ рдирд╣реАрдВ рдкрд╛ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рдореВрд▓ рд░реВрдк рд╕реЗ рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рддреЛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдПрдХ рдЫреЛрдЯрд╛ рдЙрджрд╛рд╣рд░рдг рд╣рд▓ рдХрд░реЗрдВред рдЙрд╕реА рд╕рдордп, рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рди рднреВрд▓реЗрдВ рдХрд┐ leftHalf
рдФрд░ rightHalf
рд╕реЗ rightHalf
рдореЗрдВ рдмрд╛рдВрдЯ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рд╡рд┐рднрд╛рдЬрди рдХреЛ рдмрд┐рд▓реНрдХреБрд▓ рдмреАрдЪ рдореЗрдВ рд╣реЛрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рдирд╣реАрдВ рд╣реИ рдЕрдЧрд░, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рдгреА рдореЗрдВ рд╡рд┐рд╖рдо рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рддрддреНрд╡ рд╣реЛрддреЗ рд╣реИрдВ (рдпрд╣ рд╡рд╣реА рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ floor
рдлрд╝рдВрдХреНрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ)ред
рдЕрдВрддрд┐рдо рдЕрднреНрдпрд╛рд╕ рдХреЗ рд░реВрдк рдореЗрдВ, рдЖрдЗрдП
mergeSort
рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВред рдкреНрд░рддреНрдпреЗрдХ рдЪрд░рдг рдкрд░, рд╣рдо рдореВрд▓ рд╕рд░рдгреА рдХреЛ рджреЛ рд╕рдорд╛рди рднрд╛рдЧреЛрдВ (
binarySearch
рд╕рдорд╛рди) рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдЖрдЧреЗ рдХреА рдЧрдгрдирд╛ рджреЛрдиреЛрдВ рднрд╛рдЧреЛрдВ рдкрд░ рд╣реЛрддреА рд╣реИред рдкреБрдирд░рд╛рд╡рд░реНрддрди рд░рд┐рдЯрд░реНрди рдХреЗ рдмрд╛рдж, рд╣рдо
merge
рдСрдкрд░реЗрд╢рди рдХреЛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдкрд░ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ
╬Ш( n )
рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред
рддреЛ, рд╣рдо рдореВрд▓ рд╕рд░рдгреА рдХреЛ рджреЛ рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рддреНрдпреЗрдХ
n / 2
рдЖрдХрд╛рд░ рдореЗрдВред рдЬрдм рд╣рдо рдЙрдиреНрд╣реЗрдВ рдХрдиреЗрдХреНрдЯ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ
n
рддрддреНрд╡ рдСрдкрд░реЗрд╢рди рдореЗрдВ рднрд╛рдЧ рд▓реЗрдВрдЧреЗ, рдЗрд╕рд▓рд┐рдП, рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп
╬Ш( n )
ред рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рдЪрд┐рддреНрд░ рдЗрд╕ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИ:
рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣рд╛рдВ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рд░реНрдХрд▓
mergeSort
рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд╛ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рдХрд░рддрд╛ рд╣реИред рд╕рд░реНрдХрд▓ рдореЗрдВ рд╕рдВрдЦреНрдпрд╛ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд┐рдП рдЬрд╛рдиреЗ рд╡рд╛рд▓реЗ рдПрд░реЗ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред рд╢реАрд░реНрд╖ рдиреАрд▓рд╛ рд╡реГрддреНрдд рдЖрдХрд╛рд░
n
рдХреА рдПрдХ рд╕рд░рдгреА рдХреЗ рд▓рд┐рдП
mergeSort
рдХрд░рдиреЗ рдХреА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдХреЙрд▓ рд╣реИред рдПрд░реЛ рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рдмреАрдЪ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХреЙрд▓ рджрд┐рдЦрд╛рддрд╛ рд╣реИред
mergeSort
рдХрд░рдиреЗ рдХреА рдореВрд▓ рдХреЙрд▓ рджреЛ рдирдП рд╕рд░рдгрд┐рдпреЛрдВ рдХреЛ рдЙрддреНрдкрдиреНрди рдХрд░рддреА рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ
n / 2
рдЖрдХрд╛рд░ рдореЗрдВред рдмрджрд▓реЗ рдореЗрдВ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ
n / 4
рддрддреНрд╡реЛрдВ рдХреЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рджреЛ рдФрд░ рдХреЙрд▓ рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдЬрдм рддрдХ рд╣рдореЗрдВ рдПрдХ рдЖрдХрд╛рд░ рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИред 1. рдЗрд╕ рдЖрд░реЗрдЦ рдХреЛ рдПрдХ
рдкреБрдирд░рд╛рд╡рд░реНрддреА рдкреЗрдбрд╝ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреЗ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдкреЗрдбрд╝ рдХреА рддрд░рд╣ рджрд┐рдЦрддрд╛ рд╣реИред рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдЬрдбрд╝ рдХреЗ рд╕рд╛рде рдПрдХ рдкреЗрдбрд╝ рдХреЗ рдЙрд▓рдЯрд╛ рдХреЗ рд░реВрдк рдореЗрдВ рдФрд░ рддрд▓ рдкрд░ рдЫреЛрдбрд╝ рджреЗрддрд╛ рд╣реИ)ред
рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдореЗрдВ рддрддреНрд╡реЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛
n
рдмрд░рд╛рдмрд░ рд░рд╣рддреА рд╣реИред рдпрд╣ рднреА рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдХреЙрд▓рд┐рдВрдЧ рдиреЛрдб
merge
рдСрдкрд░реЗрд╢рди рдХреЗ рд▓рд┐рдП рдмреБрд▓рд╛рдпрд╛ рдиреЛрдбреНрд╕ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдкрд░рд┐рдгрд╛рдореЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рд▓рд╛рд▓ рдиреЛрдб
n / 2
рдЖрдЗрдЯрдо рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдпрд╣
n / 2
рд╕рд░рдгреА рдХреЛ
n / 4
рджреЛ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдХреЗ рд╕рд╛рде рдкреБрди:
mergeSort
(рдЧреНрд░реАрди рдиреЛрдбреНрд╕) рдХрд╣рддрд╛ рд╣реИ, рдФрд░ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдЖрдХрд╛рд░
n / 2
рдПрдХ рдкреВрд░реНрдгрд╛рдВрдХ рдореЗрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИред
рдирддреАрдЬрддрди, рдкреНрд░рддреНрдпреЗрдХ рдкрдВрдХреНрддрд┐ рдХреА рдЬрдЯрд┐рд▓рддрд╛
╬Ш( n )
ред рд╣рдо рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕ рддрд░рд╣ рдХреА рд░реЗрдЦрд╛рдУрдВ рдХреА рд╕рдВрдЦреНрдпрд╛, рдЬрд┐рд╕реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡реГрдХреНрд╖ рдХреА
рдЧрд╣рд░рд╛рдИ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ,
log( n )
ред рдЗрд╕рдХрд╛ рдХрд╛рд░рдг рд╡рд╣реА рддрд░реНрдХ рд╣реИрдВ рдЬреЛ рд╣рдордиреЗ рдмрд╛рдЗрдирд░реА рд╕рд░реНрдЪ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдП рдереЗред рддреЛ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕
log( n )
рдЬрдЯрд┐рд▓рддрд╛рдПрдВ
╬Ш( n )
, рдЗрд╕рд▓рд┐рдП,
mergeSort
рдХреА рд╕рд╛рдорд╛рдиреНрдп рдЬрдЯрд┐рд▓рддрд╛:
╬Ш( n * log( n ) )
ред рдпрд╣
╬Ш( n
2 )
рд╕реЗ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд╣реИ, рдЬрд┐рд╕реЗ рдкрд╕рдВрдж рджреНрд╡рд╛рд░рд╛ рдЫрд╛рдВрдЯрдирд╛ рд╣рдореЗрдВ рджреЗрддрд╛ рд╣реИ (рдпрд╛рдж рд░рдЦреЗрдВ,
log( n )
рдмрд╣реБрдд рдХрдо рд╣реИ, рдЗрд╕рд▓рд┐рдП
n * log( n )
рднреА
n * n = n
2 ) рд╕реЗ рдмрд╣реБрдд рдХрдо рд╣реИ)ред
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рдкрд┐рдЫрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦрд╛ рдерд╛, рдЬрдЯрд┐рд▓рддрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рд╣рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рддреБрд▓рдирд╛ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдмреЗрд╣рддрд░ рд╣реИред рдЗрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЕрдм рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдмрдбрд╝реЗ рд╕рд░рдгрд┐рдпреЛрдВ рдХреЗ рд▓рд┐рдП, рдорд░реНрдЬ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдкрд╕рдВрдж рдХреЗ рд╣рд┐рд╕рд╛рдм рд╕реЗ рдмреЗрд╣рддрд░ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛ред рдЗрд╕ рддрд░рд╣ рдХрд╛ рдирд┐рд╖реНрдХрд░реНрд╖ рд╕рдорд╕реНрдпрд╛рдЧреНрд░рд╕реНрдд рд╣реЛрдЧрд╛ рдпрджрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╣рдорд╛рд░реЗ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЖрдзрд╛рд░ рдирд╣реАрдВ рдерд╛ред рдирд┐рд╕реНрд╕рдВрджреЗрд╣, рд░рдирдЯрд╛рдЗрдо
╬Ш( n * log( n ) )
рд╕рд╛рде рдЫрдВрдЯрдиреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд╡реНрдпрд╛рдкрдХ рд░реВрдк рд╕реЗ рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП,
рд▓рд┐рдирдХреНрд╕ рдХрд░реНрдиреЗрд▓ рд╣реАрдк рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдирд╛рдордХ рдПрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ , рдЬрд┐рд╕рдореЗрдВ рдорд░реНрдЬ рд╕реЙрд░реНрдЯ рдХреЗ рд╕рдорд╛рди рд░рдирдЯрд╛рдЗрдо рд╣реЛрддрд╛ рд╣реИред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рд╣рдо рдЗрди рдЫрдБрдЯрд╛рдИ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЗрд╖реНрдЯрддрдорддрд╛ рд╕рд╛рдмрд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред рдЗрд╕рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдмреЛрдЭрд┐рд▓ рдЧрдгрд┐рддреАрдп рддрд░реНрдХреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА, рд▓реЗрдХрд┐рди рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ: рдЬрдЯрд┐рд▓рддрд╛ рдХреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╕реЗ, рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдЦреЛрдЬрдирд╛ рдЕрд╕рдВрднрд╡ рд╣реИред
рдЗрд╕ рд▓реЗрдЦ рдХрд╛ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЖрдкрдХрд╛ рдЕрдВрддрд░реНрдЬреНрдЮрд╛рди рдЖрдкрдХреЛ рддреЗрдЬреА рд╕реЗ рдХрд╛рд░реНрдпрдХреНрд░рдо рдмрдирд╛рдиреЗ рдФрд░ рдЙрди рдЪреАрдЬреЛрдВ рдкрд░ рдЕрдиреБрдХреВрд▓рди рдкреНрд░рдпрд╛рд╕реЛрдВ рдХреЛ рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрддрд┐ рдкрд░ рдмрдбрд╝рд╛ рдкреНрд░рднрд╛рд╡ рдбрд╛рд▓рддреЗ рд╣реИрдВред рд╕рднреА рдорд┐рд▓рдХрд░ рдЖрдкрдХреЛ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рдЧрдгрд┐рддреАрдп рднрд╛рд╖рд╛ рдФрд░ рдЕрдВрдХрди (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, "рдмрдбрд╝рд╛ рдУ") рдЖрдкрдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛрдЧрд╛ рдЬрдм рдЕрдиреНрдп рд╕реЙрдлрд╝реНрдЯрд╡реЗрдпрд░ рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рддреЗ рд╕рдордп рдпрд╣ рд░рдирдЯрд╛рдЗрдо рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рдмрд╛рдд рдЖрддреА рд╣реИ, рдФрд░ рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЖрдк рдЕрдзрд┐рдЧреНрд░рд╣рд┐рдд рдЕрднреНрдпрд╛рд╕ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдЬреНрдЮрд╛рдиред
рдПрдХ рдирд┐рд╖реНрдХрд░реНрд╖ рдХреЗ рдмрдЬрд╛рдп
рдпрд╣ рд▓реЗрдЦ
рдХреНрд░рд┐рдПрдЯрд┐рд╡ рдХреЙрдордиреНрд╕ 3.0 рдПрдЯреНрд░реАрдмреНрдпреВрд╢рди рдХреЗ рддрд╣рдд рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИред рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдЖрдк рдЗрд╕реЗ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдЕрдкрдиреА рд╡реЗрдмрд╕рд╛рдЗрдЯреЛрдВ рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдкрд╛рда рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдЖрдо рддреМрд░ рдкрд░ рдЖрдк рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВред рдмрд╕ рдореЗрд░рд╛ рдирд╛рдо рдмрддрд╛рдирд╛ рди рднреВрд▓реЗрдВред рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ: рдпрджрд┐ рдЖрдк рдЗрд╕ рдкрд╛рда рдкрд░ рдЕрдкрдиреЗ рдХрд╛рдо рдХреЛ рдЖрдзрд╛рд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рддреЛ рдореИрдВ рдЖрдкрд╕реЗ рдЖрдЧреНрд░рд╣ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕реЗ рд╕рд╣рдпреЛрдЧ рдФрд░ рд╕реВрдЪрдирд╛ рдХреЗ рдкреНрд░рд╕рд╛рд░ рдХреА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП рдХреНрд░рд┐рдПрдЯрд┐рд╡ рдХреЙрдордиреНрд╕ рдХреЗ рддрд╣рдд рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░реЗрдВред
рдЕрдВрдд рддрдХ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!рд╕рдВрджрд░реНрдн
- рдХреЙрд░реНрдореЗрди, рд▓рд┐рд╕реЗрд░реНрд╕рди, рд░рд┐рд╡реЗрд╕реНрдЯ, рд╕реНрдЯреАрдиред рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХрд╛ рдкрд░рд┐рдЪрдп , рдПрдордЖрдИрдЯреА рдкреНрд░реЗрд╕
- рджрд╛рд╕рдЧреБрдкреНрддрд╛, рдкрд╛рдкрд╛рджрд┐рдорд┐рддреНрд░рд┐рдЙ, рд╡рдЬрд╝реАрд░рд╛рдиреАред рдПрд▓реНрдЧреЛрд░рд┐рджрдо , рдореИрдХрдЧреНрд░рд╛-рд╣рд┐рд▓ рдкреНрд░реЗрд╕
- Fotakisред рдПрдереЗрдВрд╕ рдХреЗ рд░рд╛рд╖реНрдЯреНрд░реАрдп рддрдХрдиреАрдХреА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдЕрд╕рддрдд рдЧрдгрд┐рдд рдХрд╛ рдХреЛрд░реНрд╕
- Fotakisред рдПрдереЗрдВрд╕ рдХреЗ рд░рд╛рд╖реНрдЯреНрд░реАрдп рддрдХрдиреАрдХреА рд╡рд┐рд╢реНрд╡рд╡рд┐рджреНрдпрд╛рд▓рдп рдореЗрдВ рдПрд▓реНрдЧреЛрд░рд┐рдердо рдФрд░ рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛ рдкрд╛рдареНрдпрдХреНрд░рдо