CodeGym/Java Blog/рдпрд╛рджреГрдЪреНрдЫрд┐рдХ/рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдгрд┐ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ
John Squirrels
рдкрд╛рддрд│реА 41
San Francisco

рд╕рд┐рджреНрдзрд╛рдВрдд рдЖрдгрд┐ рд╕рд░рд╛рд╡ рдордзреНрдпреЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ

рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рдпрд╛ рдЧреНрд░реБрдкрдордзреНрдпреЗ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХреЗрд▓реЗ
рд╕рджрд╕реНрдп
рд╕реЙрд░реНрдЯрд┐рдВрдЧ рд╣реЗ рдореВрд▓рднреВрдд рдСрдкрд░реЗрд╢рдиреНрд╕рдкреИрдХреА рдПрдХ рдЖрд╣реЗ рдЬреЗ рдЖрдкрдг рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕рд╡рд░ рдХрд░рддреЛ. рдЕрдЧрджреА рдмрд╛рд▓рдкрдгрд╛рддрд╣реА, рдореБрд▓рд╛рдВрдЪреА рд╡рд┐рдЪрд╛рд░ рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд╖рдорддрд╛ рд╡рд┐рдХрд╕рд┐рдд рд╣реЛрдд рдЕрд╕рддрд╛рдирд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдХрд░рд╛рдпрд▓рд╛ рд╢рд┐рдХрд╡рд▓реЗ рдЬрд╛рддреЗ. рд╕рдВрдЧрдгрдХ рдЖрдгрд┐ рд╕реЙрдлреНрдЯрд╡реЗрдЕрд░ рдЕрдкрд╡рд╛рдж рдирд╛рд╣реАрдд. Java рдордзреНрдпреЗ рдЕрдиреЗрдХ рдкреНрд░рдХрд╛рд░рдЪреЗ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрд╣реЗрдд . рдореА рд╕реБрдЪрд╡рд┐рддреЛ рдХреА рддреЗ рдХрд╛рдп рдЖрд╣реЗрдд рдЖрдгрд┐ рддреЗ рдХрд╕реЗ рдХрд╛рд░реНрдп рдХрд░рддрд╛рдд рддреЗ рддрдкрд╛рд╕рд╛. рдПрдЦрд╛рджреНрдпрд╛ рджрд┐рд╡рд╢реА рдореБрд▓рд╛рдЦрддреАрдд рддреБрдореНрд╣рд╛рд▓рд╛ рддреНрдпрд╛рдкреИрдХреА рдПрдХрд╛рдмрджреНрджрд▓ рд╡рд┐рдЪрд╛рд░рд▓реЗ рдЧреЗрд▓реЗ рддрд░?

рдкрд░рд┐рдЪрдп

рдШрдЯрдХрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреЗ рд╣реА рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреНрдпрд╛ рд╢реНрд░реЗрдгреАрдВрдкреИрдХреА рдПрдХ рдЖрд╣реЗ рдЬреА рд╡рд┐рдХрд╕рдХрд╛рд▓рд╛ рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдореА рд╢рд╛рд│реЗрдд рдЕрд╕рддрд╛рдирд╛ рд╕рдВрдЧрдгрдХ рд╡рд┐рдЬреНрдЮрд╛рдирд╛рд▓рд╛ рдПрдХреЗрдХрд╛рд│реА рдЧрд╛рдВрднреАрд░реНрдпрд╛рдиреЗ рдШреЗрддрд▓реЗ рдирд╛рд╣реА, рддрд░ рдЖрдЬрдЪреЗ рд╡рд┐рджреНрдпрд╛рд░реНрдереА рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд▓рд╛рдЧреВ рдХрд░рдгреНрдпрд╛рд╕ рдЖрдгрд┐ рд╕рдордЬреВрди рдШреЗрдгреНрдпрд╛рд╕ рд╕рдХреНрд╖рдо рдЕрд╕рд▓реЗ рдкрд╛рд╣рд┐рдЬреЗрдд. рдореВрд▓рднреВрдд рдЕрд▓реНрдЧреЛрд░рд┐рджрдо, рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛, рдлреЙрд░ рд▓реВрдк рд╡рд╛рдкрд░реВрди рд▓рд╛рдЧреВ рдХреЗрд▓реЗ рдЬрд╛рддрд╛рдд. рд╕рд╛рд╣рдЬрд┐рдХрдЪ, рдЕреЕрд░реЗрд╕рд╛рд░рдЦреНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪреНрдпрд╛ рд╕рдВрдЧреНрд░рд╣рд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА, рддреБрдореНрд╣рд╛рд▓рд╛ рдХрд╕рд╛ рддрд░реА рд╕рдВрдЧреНрд░рд╣рд╛рддреВрди рдЬрд╛рд╡реЗ рд▓рд╛рдЧреЗрд▓. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде:
int[] array = {10, 2, 10, 3, 1, 2, 5};
for (int i = 0; i < array.length; i++) {
	System.out.println(array[i]);
}
рдХреЛрдбрдЪреНрдпрд╛ рдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдмрджреНрджрд▓ рдХрд╛рдп рдореНрд╣рдгрддрд╛ рдпреЗрдИрд▓? рдЖрдордЪреНрдпрд╛рдХрдбреЗ рдПрдХ рд▓реВрдк рдЖрд╣реЗ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдЗрдВрдбреЗрдХреНрд╕ ( int i) 0 рд╡рд░реВрди рдЕреЕрд░реЗрдордзреАрд▓ рд╢реЗрд╡рдЯрдЪреНрдпрд╛ рдШрдЯрдХрд╛рдкрд░реНрдпрдВрдд рдмрджрд▓рддреЛ. рдЦрд░рдВ рддрд░, рдЖрдореНрд╣реА рдлрдХреНрдд рдЕреЕрд░реЗрдордзреАрд▓ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХ рдШреЗрдд рдЖрд╣реЛрдд рдЖрдгрд┐ рддреНрдпрд╛рддреАрд▓ рд╕рд╛рдордЧреНрд░реА рдореБрджреНрд░рд┐рдд рдХрд░рдд рдЖрд╣реЛрдд. рдЕреЕрд░реЗрдордзреНрдпреЗ рдЬрд┐рддрдХреЗ рдЬрд╛рд╕реНрдд рдШрдЯрдХ рдЕрд╕рддреАрд▓, рдХреЛрдб рдкреВрд░реНрдг рд╡реНрд╣рд╛рдпрд▓рд╛ рдЬрд╛рд╕реНрдд рд╡реЗрд│ рд▓рд╛рдЧреЗрд▓. рдореНрд╣рдгрдЬреЗрдЪ, рдЬрд░ nрдШрдЯрдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдЕрд╕реЗрд▓ рддрд░, n = 10рдХрд╛рд░реНрдпрдХреНрд░рдо рдХреЗрд╡реНрд╣рд╛ рдкреЗрдХреНрд╖рд╛ рджреБрдкреНрдкрдЯ рд╡реЗрд│ рдЪрд╛рд▓реЗрд▓ n = 5. рдЖрдордЪреНрдпрд╛ рдкреНрд░реЛрдЧреНрд░рд╛рдордордзреНрдпреЗ рдПрдХрдЪ рд▓реВрдк рдЕрд╕рд▓реНрдпрд╛рд╕, рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рд░реЗрд╖реАрдпрдкрдгреЗ рд╡рд╛рдврддреЗ: рдЬреЗрд╡рдвреЗ рдЬрд╛рд╕реНрдд рдШрдЯрдХ рдЕрд╕рддреАрд▓, рддрд┐рддрдХреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рдЬрд╛рд╕реНрдд рдЕрд╕реЗрд▓. рдЕрд╕реЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдХреА рд╡рд░реАрд▓ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд░реЗрдЦреАрдп рд╡реЗрд│реЗрдд рдХрд╛рд░реНрдп рдХрд░рддреЗ (n рдЪреЗ рд░реЗрдЦреАрдп рдХрд╛рд░реНрдп). рдЕрд╢рд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдордзреНрдпреЗ, рдЖрдореНрд╣реА рдореНрд╣рдгрддреЛ рдХреА рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЬрдЯрд┐рд▓рддрд╛ "O(n)" рдЖрд╣реЗ. рдпрд╛ рдиреЛрдЯреЗрд╢рдирд▓рд╛ "рдмрд┐рдЧ рдУ" рдХрд┐рдВрд╡рд╛ "рдЕрд╕рд┐рдореНрдкреНрдЯреЛрдЯрд┐рдХ рд╡рд░реНрддрди" рдЕрд╕реЗрд╣реА рдореНрд╣рдгрддрд╛рдд. рдкрдг рддреБрдореНрд╣реА рдлрдХреНрдд рд▓рдХреНрд╖рд╛рдд рдареЗрд╡реВ рд╢рдХрддрд╛ "

рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдХреНрд░рдорд╡рд╛рд░реА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо (рдмрдмрд▓ рдХреНрд░рдорд╡рд╛рд░реА)

рд╕рдордЬрд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЕреЕрд░реЗ рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдкрдг рддреНрдпрд╛рджреНрд╡рд╛рд░реЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░реВ рд╢рдХрддреЛ. рдорд╕реНрдд. рдЖрддрд╛ рдЪрдврддреНрдпрд╛ рдХреНрд░рдорд╛рдиреЗ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░реВрдпрд╛. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдХрд╛рдп? рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рджреЛрди рдШрдЯрдХ рджрд┐рд▓реЗрд▓реЗ (рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, a = 6, b = 5), рдЖрдкрдг рдкреБрдирд░реНрд░рдЪрдирд╛ рдХреЗрд▓реА рдкрд╛рд╣рд┐рдЬреЗ aрдЖрдгрд┐ bрдЬрд░ (рдЬрд░ ) aрдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдЕрд╕реЗрд▓ рддрд░ . рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣реА рд╕рдВрдЧреНрд░рд╣рд╛рд╕рд╣ рдХрд╛рд░реНрдп рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рд╡рд╛рдкрд░рддреЛ рддреЗрд╡реНрд╣рд╛ рдпрд╛рдЪрд╛ рдХрд╛рдп рдЕрд░реНрде рд╣реЛрддреЛ (рдЬрд╕реЗ рдЕреЕрд░реЗрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рдЖрд╣реЗ)? рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЬрд░ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ a рд╕рд╣ рдШрдЯрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ ( ) рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдкреЗрдХреНрд╖рд╛ рдореЛрдард╛ рдЕрд╕реЗрд▓ рддрд░ рдШрдЯрдХ рд╕реНрд╡реЕрдк рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдард┐рдХрд╛рдгреЗ рдмрджрд▓рдгреНрдпрд╛рдЪреЗ рд╡реЗрдЧрд╡реЗрдЧрд│реЗ рдорд╛рд░реНрдЧ рдЖрд╣реЗрдд. рдкрд░рдВрддреБ рдЖрдореНрд╣реА рдПрдХ рддрдВрддреНрд░ рд╡рд╛рдкрд░реВ рдЬреЗ рд╕реЛрдкреЗ, рд╕рдордЬрдгреНрдпрд╛рд╕рд╛рд░рдЦреЗ рдЖрдгрд┐ рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рдгреНрдпрд╛рд╕ рд╕реЛрдкреЗ рдЖрд╣реЗ: ba > bbarray[a] > array[b]
private void swap(int[] array, int ind1, int ind2) {
    int tmp = array[ind1];
    array[ind1] = array[ind2];
    array[ind2] = tmp;
}
рдЖрддрд╛ рдЖрдкрдг рдЦрд╛рд▓реАрд▓ рд▓рд┐рд╣реВ рд╢рдХрддреЛ:
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
for (int i = 1; i < array.length; i++) {
	if (array[i] < array[i - 1]) {
		swap(array, i, i-1);
	}
}
System.out.println(Arrays.toString(array));
рдЬрд╕реЗ рдЖрдкрдг рдкрд╛рд╣реВ рд╢рдХрддрд╛, рдШрдЯрдХ рдЦрд░реЛрдЦрд░ рд╕реНрд╡реЕрдк рдХреЗрд▓реЗ рдЧреЗрд▓реЗ. array[i] < array[i-1]рдЖрдореНрд╣реА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ 1 рдиреЗ рд╕реБрд░реБрд╡рд╛рдд рдХреЗрд▓реА, рдХрд╛рд░рдг рдЕреЕрд░реЗрдордзреНрдпреЗ рдлрдХреНрдд рдПрдХ рдШрдЯрдХ рдЕрд╕рд▓реНрдпрд╛рд╕, рдЗрдВрдбреЗрдХреНрд╕рд╕рд╛рдареА рдЕрднрд┐рд╡реНрдпрдХреНрддреА рдЕрд╡реИрдз рдЖрд╣реЗ 0. рдЕрд╕реЗ рдХреЗрд▓реНрдпрд╛рдиреЗ рдЕреЕрд░реЗрдордзреНрдпреЗ рдХреЛрдгрддреЗрд╣реА рдШрдЯрдХ рдирд╕рддрд╛рдд рдХрд┐рдВрд╡рд╛ рдлрдХреНрдд рдПрдХ рдШрдЯрдХ рдирд╕рд▓реЗрд▓реНрдпрд╛ рдкреНрд░рдХрд░рдгрд╛рдВрдкрд╛рд╕реВрди рджреЗрдЦреАрд▓ рдЖрдордЪреЗ рд╕рдВрд░рдХреНрд╖рдг рд╣реЛрддреЗ рдЖрдгрд┐ рдпрд╛рдореБрд│реЗ рдХреЛрдб рдЕрдзрд┐рдХ рдЪрд╛рдВрдЧрд▓рд╛ рджрд┐рд╕рддреЛ. рдкрд░рдВрддреБ рдкрд░рд┐рдгрд╛рдореА рдЕтАНреЕрд░реЗ рдЕрджреНрдпрд╛рдк рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реЗрд▓реЗ рдирд╛рд╣реА, рдХрд╛рд░рдг рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рдПрдХ рдкрд╛рд╕ рдкреБрд░реЗрд╕рд╛ рдирд╛рд╣реА. рдЖрдореНрд╣рд╛рд▓рд╛ рджреБрд╕рд░рд╛ рд▓реВрдк рдЬреЛрдбрд╛рд╡рд╛ рд▓рд╛рдЧреЗрд▓ рдЬреНрдпрд╛рдордзреНрдпреЗ рдЖрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реЗрд▓рд╛ рдЕтАНреЕрд░реЗ рдорд┐рд│рдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдкрд╛рд╕ рдкреБрдиреНрд╣рд╛ рдкреБрдиреНрд╣рд╛ рдХрд░реВ:
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
boolean needIteration = true;
while (needIteration) {
	needIteration = false;
	for (int i = 1; i < array.length; i++) {
		if (array[i] < array[i - 1]) {
			swap(array, i, i-1);
			needIteration = true;
		}
	}
}
System.out.println(Arrays.toString(array));
рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдЖрдордЪреЗ рдкрд╣рд┐рд▓реЗ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдкреВрд░реНрдг рдХреЗрд▓реЗ. рдЖрдореНрд╣реА рдмрд╛рд╣реЗрд░реАрд▓ рд▓реВрдкрдЪреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЛ ( while) рдЬреЛрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдард░рд╡рддреЛ рдХреА рдЖрдгрдЦреА рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рдбреАрдлреЙрд▓реНрдЯрдиреБрд╕рд╛рд░, рдкреНрд░рддреНрдпреЗрдХ рдирд╡реАрди рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдкреВрд░реНрд╡реА, рдЖрдореНрд╣реА рдЕрд╕реЗ рдЧреГрд╣реАрдд рдзрд░рддреЛ рдХреА рдЖрдордЪреА рдЕреЕрд░реЗ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реА рдЖрд╣реЗ рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдЖрддрд╛ рд▓реВрдк рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╛рд╣реА. рддреНрдпрд╛рдиреБрд╕рд╛рд░, рдЖрдореНрд╣реА рдШрдЯрдХрд╛рдВрдордзреВрди рдЕрдиреБрдХреНрд░рдореЗ рд╣рд▓рддреЛ рдЖрдгрд┐ рд╣реЗ рдЧреГрд╣рд┐рддрдХ рддрдкрд╛рд╕рддреЛ. рдкрд░рдВрддреБ рдЬрд░ рдШрдЯрдХ рдХреНрд░рдорд╛рдиреЗ рдирд╕рддреАрд▓, рддрд░ рдЖрдореНрд╣реА рдШрдЯрдХрд╛рдВрдЪреА рдЕрджрд▓рд╛рдмрджрд▓ рдХрд░рддреЛ рдЖрдгрд┐ рд╕рдордЬреВрди рдШреЗрддреЛ рдХреА рдШрдЯрдХ рдпреЛрдЧреНрдп рдХреНрд░рдорд╛рдиреЗ рдЖрд╣реЗрдд рдпрд╛рдЪреА рдЖрдореНрд╣рд╛рд▓рд╛ рдЦрд╛рддреНрд░реА рдирд╛рд╣реА. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдЕрд╕рд╛ рдХреА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рдЖрдгрдЦреА рдПрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЖрд╣реЗ. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рд╕рдордЬрд╛ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдЖрд╣реЗ [3, 5, 2]. 5рдкреЗрдХреНрд╖рд╛ рдЬрд╛рд╕реНрдд рдЖрд╣реЗ 3тАФ рд╕рд░реНрд╡ рдареАрдХ рдЖрд╣реЗ. рдкрдг 2рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЖрд╣реЗ 5. рддрдерд╛рдкрд┐, [3, 2, 5]рджреБрд╕рд░рд╛ рдкрд╛рд╕ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ, рдкрд╛рд╕реВрди3 > 2рдЖрдгрд┐ рддреНрдпрд╛рдВрдЪреА рдЕрджрд▓рд╛рдмрджрд▓ рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдЖрдкрдг рд▓реВрдкрдордзреНрдпреЗ рд▓реВрдк рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реНрдпрд╛рдореБрд│реЗ, рдЖрдкрд▓реНрдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЬрдЯрд┐рд▓рддрд╛ рд╡рд╛рдврддреЗ. рджрд┐рд▓реЗрд▓реЗ nрдШрдЯрдХ, рддреЗ рдмрдирддреЗ n * n, рдореНрд╣рдгрдЬреЗ, O(n^2). рдпрд╛рд▓рд╛ рдЪрддреБрд░реНрднреБрдЬ рдЬрдЯрд┐рд▓рддрд╛ рдореНрд╣рдгрддрд╛рдд. рд╕рд░реНрд╡рд╕рд╛рдзрд╛рд░рдгрдкрдгреЗ, рдХрд┐рддреА рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреАрд▓ рд╣реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рдард╛рдКрдХ рдирд╛рд╣реА. рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреНрдпрд╛ рдЬрдЯрд┐рд▓рддреЗрдЪреА рдЕрднрд┐рд╡реНрдпрдХреНрддреА рджрд░реНрд╢рд╡рддреЗ рдХреА рд╕рд░реНрд╡рд╛рдд рд╡рд╛рдИрдЯ рдкрд░рд┐рд╕реНрдерд┐рддреАрдд рдЬрдЯрд┐рд▓рддрд╛ рдХрд╢реА рд╡рд╛рдврддреЗ. рдореНрд╣рдгрдЬреЗрдЪ, рдШрдЯрдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдмрджрд▓рд▓реНрдпрд╛рдореБрд│реЗ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрдЪреА рд╡реЗрд│ рдХрд┐рддреА рд╡рд╛рдвреЗрд▓ рд╣реЗ рд╕реВрдЪрд┐рдд рдХрд░рддреЗ n. рдмрдмрд▓ рд╕реЙрд░реНрдЯ рд╣рд╛ рд╕рд░реНрд╡рд╛рдд рд╕реЛрдкрд╛ рдЖрдгрд┐ рд╕рд░реНрд╡рд╛рдд рдЕрдХрд╛рд░реНрдпрдХреНрд╖рдо рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрд╣реЗ. рдпрд╛рд▓рд╛ рдХрдзреАрдХрдзреА "рдореВрд░реНрдЦ рдХреНрд░рдорд╡рд╛рд░реА" рджреЗрдЦреАрд▓ рдореНрд╣рдЯрд▓реЗ рдЬрд╛рддреЗ. рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рд╣рд┐рддреНрдп:

рдирд┐рд╡рдб рдХреНрд░рдорд╡рд╛рд░реА

рджреБрд╕рд░рд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдирд┐рд╡рдб рдХреНрд░рдорд╡рд╛рд░реА рдЖрд╣реЗ. рдпрд╛рдд рдЪрддреБрд░реНрднреБрдЬ рдЬрдЯрд┐рд▓рддрд╛ рджреЗрдЦреАрд▓ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдирдВрддрд░ рддреНрдпрд╛рдмрджреНрджрд▓ рдЕрдзрд┐рдХ. рддрд░ рдХрд▓реНрдкрдирд╛ рд╕реЛрдкреА рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕рд╡рд░, рдЖрдореНрд╣реА рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдШрдЯрдХ рдирд┐рд╡рдбрддреЛ рдЖрдгрд┐ рддреНрдпрд╛рд╕ рд╕реБрд░реБрд╡рд╛рддреАрд╕ рд╢рд┐рдлреНрдЯ рдХрд░рддреЛ. рдпрд╛рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рд╕ рдЙрдЬрд╡реАрдХрдбреЗ рдПрдХ рдкрд╛рдпрд░реА рд╕реБрд░реВ рдХрд░рддреЛ. рджреБрд╕рд▒реНрдпрд╛ рд╢рдмреНрджрд╛рдВрдд, рдкрд╣рд┐рд▓рд╛ рдкрд╛рд╕ рд╢реВрдиреНрдп рдШрдЯрдХрд╛рдкрд╛рд╕реВрди рд╕реБрд░реВ рд╣реЛрддреЛ, рджреБрд╕рд░рд╛ рдкрд╛рд╕ рдкрд╣рд┐рд▓реНрдпрд╛рдкрд╛рд╕реВрди рдЗ. рддреЗ рдЕрд╕реЗ рджрд┐рд╕реЗрд▓:
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
for (int left = 0; left < array.length; left++) {
	int minInd = left;
	for (int i = left; i < array.length; i++) {
		if (array[i] < array[minInd]) {
			minInd = i;
		}
	}
	swap(array, left, minInd);
}
System.out.println(Arrays.toString(array));
рд╣реА рдХреНрд░рдорд╡рд╛рд░реА рдЕрд╕реНрдерд┐рд░ рдЖрд╣реЗ, рдХрд╛рд░рдг рдПрдХрд╕рд╛рд░рдЦреЗ рдШрдЯрдХ (рдЖрдкрдг рдШрдЯрдХрд╛рдВрдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд╛рдкрд░рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдХреЛрдгрддреНрдпрд╛рд╣реА рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдиреБрд╕рд╛рд░) рддреНрдпрд╛рдВрдЪреА рд╕рд╛рдкреЗрдХреНрд╖ рд╕реНрдерд┐рддреА рдмрджрд▓реВ рд╢рдХрддрд╛рдд. рдирд┐рд╡рдб рдХреНрд░рдорд╡рд╛рд░реАрд╡рд░реАрд▓ рд╡рд┐рдХрд┐рдкреАрдбрд┐рдпрд╛ рд▓реЗрдЦрд╛рдд рдПрдХ рдЪрд╛рдВрдЧрд▓реЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ . рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рд╣рд┐рддреНрдп:

рдШрд╛рд▓рдгреНрдпрд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА

рдЗрдиреНрд╕рд░реНрд╢рди рд╕реЙрд░реНрдЯрдордзреНрдпреЗ рдЪрддреБрд░реНрднреБрдЬ рдЬрдЯрд┐рд▓рддрд╛ рджреЗрдЦреАрд▓ рдЕрд╕рддреЗ, рдХрд╛рд░рдг рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рдкреБрдиреНрд╣рд╛ рд▓реВрдкрдордзреНрдпреЗ рд▓реВрдк рдЕрд╕рддреЛ. рдЕрдВрддрд░реНрднреВрдд рдХрд░рдгреНрдпрд╛рдЪреА рдХреНрд░рдорд╡рд╛рд░реА рд╡реЗрдЧрд│реА рдХрд╢рд╛рдореБрд│реЗ рд╣реЛрддреЗ? рд╣реЗ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо "рд╕реНрдерд┐рд░" рдЖрд╣реЗ. рдпрд╛рдЪрд╛ рдЕрд░реНрде рдПрдХрд╕рд╛рд░рдЦреЗ рдШрдЯрдХ рддреНрдпрд╛рдВрдЪрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рдХреНрд░рдо рдмрджрд▓рдгрд╛рд░ рдирд╛рд╣реАрдд. рдкреБрдиреНрд╣рд╛, рдЖрдордЪрд╛ рдЕрд░реНрде рдЖрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдд рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡реИрд╢рд┐рд╖реНрдЯреНрдпрд╛рдВрдЪреНрдпрд╛ рдмрд╛рдмрддреАрдд рд╕рдорд╛рди рдЖрд╣реЗ.
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
for (int left = 0; left < array.length; left++) {
	// Get an element
	int value = array[left];
	// Iterate through the elements that are in front of this element
	int i = left - 1;
	for (; i >= 0; i--) {
		// If the current element is smaller, then move the larger element to the right.
		if (value < array[i]) {
			array[i + 1] = array[i];
		} else {
			// If the current element is larger, we stop
			break;
		}
	}
	// Insert the current value in the empty space
	array[i + 1] = value;
}
System.out.println(Arrays.toString(array));

рд╢рдЯрд▓ рдХреНрд░рдорд╡рд╛рд░реА

рдЖрдгрдЦреА рдПрдХ рд╕реЛрдкрд╛ рдХреНрд░рдорд╡рд╛рд░реА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЖрд╣реЗ: рд╢рдЯрд▓ рдХреНрд░рдорд╡рд╛рд░реА. рдпрд╛рд▓рд╛ рджреНрд╡рд┐рджрд┐рд╢рд╛рддреНрдордХ рдмрдмрд▓ рд╕реЙрд░реНрдЯ рдХрд┐рдВрд╡рд╛ рдХреЙрдХрдЯреЗрд▓ рд╢реЗрдХрд░ рд╕реЙрд░реНрдЯ рдЕрд╕реЗрд╣реА рдореНрд╣рдгрддрд╛рдд. рд╣реА рдкрд░реНрдпрд╛рдпреА рдирд╛рд╡реЗ рдЖрдореНрд╣рд╛рд▓рд╛ рд╕рд╛рдВрдЧрддрд╛рдд рдХреА рд╢рдЯрд▓ рдХреНрд░рдорд╡рд╛рд░реА рд╕реНрдкреЗрд╕ рд╢рдЯрд▓рдмрджреНрджрд▓ рдирд╛рд╣реА. рд╣реЗ рдПрдЦрд╛рджреНрдпрд╛ рдЧреЛрд╖реНрдЯреАрдмрджреНрджрд▓ рдЖрд╣реЗ рдЬреЗ рдкреБрдвреЗ рдЖрдгрд┐ рдорд╛рдЧреЗ рдлрд┐рд░рддреЗ. рдЬреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░рддрд╛ рддреЗрд╡реНрд╣рд╛ рддреБрдореНрд╣реА рдпрд╛рдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛. рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреЗ рд╕рд╛рд░ рдХрд╛рдп рдЖрд╣реЗ? рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪрд╛ рд╕рд╛рд░ рдЕрд╕рд╛ рдЖрд╣реЗ рдХреА рдЖрдореНрд╣реА рдбрд╛рд╡реАрдХрдбреВрди рдЙрдЬрд╡реАрдХрдбреЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдХрд░рддреЛ, рдШрдЯрдХрд╛рдВрдЪреА рдЕрджрд▓рд╛рдмрджрд▓ рдХрд░рддреЛ рдЖрдгрд┐ рдЗрддрд░ рджрд┐рд╢реЗрдиреЗ рд╢рд┐рд▓реНрд▓рдХ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдВрдкреИрдХреА рдХреЛрдгрддреЗрд╣реА рд╕реНрд╡реЕрдк рдХрд░рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ рдХрд╛ рддреЗ рддрдкрд╛рд╕рддреЛ.
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
for (int i = 1; i < array.length; i++) {
	if (array[i] < array[i - 1]) {
		swap(array, i, i - 1);
		for (int z = i - 1; (z - 1) >= 0; z--) {
			if (array[z] < array[z - 1]) {
				swap(array, z, z - 1);
			} else {
				break;
			}
		}
	}
}
System.out.println(Arrays.toString(array));
рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рд╣рд┐рддреНрдп:

рд╢реЗрд▓ рдХреНрд░рдорд╡рд╛рд░реА

рдЖрдгрдЦреА рдПрдХ рд╕реЛрдкрд╛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдореНрд╣рдгрдЬреЗ рд╢реЗрд▓ рд╕реЙрд░реНрдЯ. рддреНрдпрд╛рдЪрд╛ рд╕рд╛рд░рд╛рдВрд╢ рдмрдмрд▓ рд╕реЙрд░реНрдЯ рд╕рд╛рд░рдЦрд╛рдЪ рдЖрд╣реЗ, рдкрд░рдВрддреБ рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдордзреНрдпреЗ рдЖрдкрд▓реНрдпрд╛рдХрдбреЗ рддреБрд▓рдирд╛ рдХреЗрд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдВрдордзреНрдпреЗ рднрд┐рдиреНрди рдЕрдВрддрд░ рдЖрд╣реЗ. рдкреНрд░рддреНрдпреЗрдХ рдкреБрдирд░рд╛рд╡реГрддреНрддреАрд╕рд╣ рддреЗ рдЕрд░реНрдзреЗ рдХрд╛рдкрд▓реЗ рдЬрд╛рддреЗ. рдпреЗрдереЗ рдПрдХ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдЖрд╣реЗ:
int[] array = {10, 2, 10, 3, 1, 2, 5};
System.out.println(Arrays.toString(array));
// Calculate the gap between the checked elements
int gap = array.length / 2;
// As long as there is a gap between the elements
while (gap >= 1) {
    for (int right = 0; right < array.length; right++) {
        // Shift the right index until we find one for which
        // there is the necessary gap between it and the element before it
       for (int c = right - gap; c >= 0; c -= gap) {
           if (array[c] > array[c + gap]) {
               swap(array, c, c + gap);
           }
        }
    }
    // Recalculate the gap
    gap = gap / 2;
}
System.out.println(Arrays.toString(array));
рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рд╣рд┐рддреНрдп:

рдХреНрд░рдорд╡рд╛рд░реА рд╡рд┐рд▓реАрди рдХрд░рд╛

рдпрд╛ рд╕реЛрдкреНрдпрд╛ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡реНрдпрддрд┐рд░рд┐рдХреНрдд, рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рджреЗрдЦреАрд▓ рдЖрд╣реЗрдд. рдЙрджрд╛рд╣рд░рдгрд╛рд░реНрде, рдХреНрд░рдорд╡рд╛рд░реА рд╡рд┐рд▓реАрди рдХрд░рд╛. рдпрд╛рдд рджреЛрди рдЧреЛрд╖реНрдЯреА рд▓рдХреНрд╖рд╛рдд рдШреЗрдгреНрдпрд╛рд╕рд╛рд░рдЦреНрдпрд╛ рдЖрд╣реЗрдд. рдкреНрд░рдердо, рдпреЗрдереЗ рдкреБрдирд░рд╛рд╡реГрддреНрддреА рдЖрдордЪреНрдпрд╛ рдмрдЪрд╛рд╡рд╛рд╕рд╛рдареА рдпреЗрддреЗ. рджреБрд╕рд░реЗ, рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЬрдЯрд┐рд▓рддрд╛ рдпрд╛рдкреБрдвреЗ рдЪрддреБрд░реНрднреБрдЬ рдирд╛рд╣реА, рдЬрд╢реА рдЖрдкрд▓реНрдпрд╛рд▓рд╛ рд╕рд╡рдп рдЖрд╣реЗ. рдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЬрдЯрд┐рд▓рддрд╛ рд▓реЙрдЧрд░рд┐рджрдорд┐рдХ рдЖрд╣реЗ. рд╣реЗ рдЕрд╕реЗ рд▓рд┐рд╣рд┐рд▓реЗ рдЖрд╣реЗ O(n log n). рддрд░ рддреНрдпрд╛рдЪреА рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреА рдХрд░реВрдпрд╛. рдкреНрд░рдердо, рдЖрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рдкрджреНрдзрддреАрд╡рд░ рдПрдХ рдЖрд╡рд░реНрддреА рдХреЙрд▓ рд▓рд┐рд╣реВ:
public static void mergeSort(int[] source, int left, int right) {
        // Select the delimiter, i.e. split the input array in half
        int delimiter = left + ((right - left) / 2) + 1;
        // Recursively execute this function on the two halves (if we can split the input array)
        if (delimiter > 0 && right > (left + 1)) {
            mergeSort(source, left, delimiter - 1);
            mergeSort(source, delimiter, right);
        }
}
рдЖрддрд╛, рдЖрдкрд▓реНрдпрд╛ рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдореБрдЦреНрдп рдХреНрд░рд┐рдпрд╛ рдЬреЛрдбреВрдпрд╛. рд╣реА рдЖрдордЪреА рд╕реБрдкрд░ рдкрджреНрдзрдд рдЖрд╣реЗ:
public static void mergeSort(int[] source, int left, int right) {
        // Select the delimiter, i.e. split the input array in half
        int delimiter = left + ((right - left) / 2) + 1;
        // Recursively execute this function on the two halves (if we can split the input array)
        if (delimiter > 0 && right > (left + 1)) {
            mergeSort(source, left, delimiter - 1);
            mergeSort(source, delimiter, right);
        }
        // Create a temporary array with the required size
        int[] buffer = new int[right - left + 1];
        // Starting from the specified left index, go through each element.
        int cursor = left;
        for (int i = 0; i < buffer.length; i++) {
            // We use delimeter to point to the element on the right half
            // If delimeter> right, then the right half has no elements that haven't been added
            if (delimiter > right || source[cursor] > source[delimiter]) {
                buffer[i] = source[cursor];
                cursor++;
            } else {
                buffer[i] = source[delimiter];
                delimiter++;
            }
        }
        System.arraycopy(buffer, 0, source, left, buffer.length);
}
рдЖрдореНрд╣реА рдХреЙрд▓ рдХрд░реВрди рдЖрдордЪреЗ рдЙрджрд╛рд╣рд░рдг рдЪрд╛рд▓рд╡реВ рд╢рдХрддреЛmergeSort(array, 0, array.length-1). рдЬрд╕реЗ рддреБрдореНрд╣реА рдмрдШреВ рд╢рдХрддрд╛, рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рдЪреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдЕрд╕рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдЪреНрдпрд╛ рдЖрдгрд┐ рд╕рдорд╛рдкреНрддреАрдЪреНрдпрд╛ рд╕рдВрдХреЗрддрд╛рдВрд╕рд╣ рдЗрдирдкреБрдЯ рдЕреЕрд░реЗ рд╕реНрд╡реАрдХрд╛рд░рдгреНрдпрд╛рдкрд░реНрдпрдВрдд рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдЙрдХрд│рддреЗ. рдЬреЗрд╡реНрд╣рд╛ рдХреНрд░рдорд╡рд╛рд░реА рд╕реБрд░реВ рд╣реЛрддреЗ, рддреЗрд╡реНрд╣рд╛ рд╣реА рдЕреЕрд░реЗрдЪреА рд╕реБрд░реБрд╡рд╛рдд рдЖрдгрд┐ рд╢реЗрд╡рдЯ рдЕрд╕рддреЗ. рдордЧ рдЖрдкрдг рдкрд░рд┐рд╕реАрдордХ рдореЛрдЬрддреЛ, рд╣реА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдЖрд╣реЗ рдЬрд┐рдереЗ рдЖрдкрдг рдЕреЕрд░реЗ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░реВ. рдЬрд░ рдЕтАНреЕрд░реЗ 2 рднрд╛рдЧрд╛рдВрдордзреНрдпреЗ рд╡рд┐рднрд╛рдЧрд▓реА рдЬрд╛рдК рд╢рдХрддреЗ, рддрд░ рдЕтАНреЕрд░реЗрдЪреНрдпрд╛ рджреЛрди рднрд╛рдЧрд╛рдВрд╕рд╛рдареА рдЖрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рдкрджреНрдзрдд рдореНрд╣рдгрддреЛ. рдЖрдореНрд╣реА рдПрдХ рд╕рд╣рд╛рдпрдХ рдмрдлрд░ рддрдпрд╛рд░ рдХрд░рддреЛ рдЬрд┐рдереЗ рдЖрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реЗрд▓рд╛ рд╡рд┐рднрд╛рдЧ рдШрд╛рд▓реВ. рдкреБрдвреЗ, рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕рд╛рдареА рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╕реБрд░реВрд╡рд╛рддреАрд╕ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╕реЗрдЯ рдХрд░рд╛ рдЖрдгрд┐ рд░рд┐рдХрд╛рдореНрдпрд╛ рдмрдлрд░рдЪреНрдпрд╛ рдкреНрд░рддреНрдпреЗрдХ рдШрдЯрдХрд╛рддреВрди рдЪрд╛рд▓рдгреЗ рд╕реБрд░реВ рдХрд░рд╛, рддреЗ рд╕рд░реНрд╡рд╛рдд рд▓рд╣рд╛рди рдШрдЯрдХрд╛рдВрд╕рд╣ рднрд░рд╛. рдЬрд░ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХрд╛рдиреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдШрдЯрдХ рдкрд░рд┐рд╕реАрдорд╛рдХрд╛рдиреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗрд▓реНрдпрд╛ рдШрдЯрдХрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕реЗрд▓, рддрд░ рдЖрдореНрд╣реА рдШрдЯрдХ рдмрдлрд░рдордзреНрдпреЗ рдареЗрд╡рддреЛ рдЖрдгрд┐ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдмрджрд▓рддреЛ. рдЕрдиреНрдпрдерд╛, рдЖрдореНрд╣реА рдкрд░рд┐рд╕реАрдордХрд╛рдиреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХреЗрд▓реЗрд▓рд╛ рдШрдЯрдХ рдмрдлрд░рдордзреНрдпреЗ рдареЗрд╡рддреЛ рдЖрдгрд┐ рдкрд░рд┐рд╕реАрдордХ рд╢рд┐рдлреНрдЯ рдХрд░рддреЛ. рд╡рд┐рднрд╛рдЧрдгреА рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реЗрд▓реНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╕реАрдорд╛рдВрдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЬрд╛рддрд╛рдЪ рдХрд┐рдВрд╡рд╛ рдЖрдореНрд╣реА рд╕рдВрдкреВрд░реНрдг рдЕтАНреЕрд░реЗ рднрд░рддреЛ, рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢реНрд░реЗрдгреА рдХреНрд░рдорд╡рд╛рд░реАрдд рдорд╛рдирд▓реА рдЬрд╛рддреЗ.рдпрд╛ рд╡рд┐рд╖рдпрд╛рд╡рд░реАрд▓ рд╕рд╛рд╣рд┐рддреНрдп:

рдореЛрдЬрдгреА рдХреНрд░рдорд╡рд╛рд░реА рдЖрдгрд┐ рдореВрд▓рд╛рдВрдХ рдХреНрд░рдорд╡рд╛рд░реА

рдЖрдгрдЦреА рдПрдХ рдордиреЛрд░рдВрдЬрдХ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдореНрд╣рдгрдЬреЗ рдореЛрдЬрдгреА рдХреНрд░рдорд╡рд╛рд░реА. рдпреЗрдереЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдорд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдЖрд╣реЗ O(n+k), nрдШрдЯрдХрд╛рдВрдЪреА рд╕рдВрдЦреНрдпрд╛ рдХреБрдареЗ рдЖрд╣реЗ рдЖрдгрд┐ kрдШрдЯрдХрд╛рдЪреЗ рдХрдорд╛рд▓ рдореВрд▓реНрдп рдЖрд╣реЗ. рдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордордзреНрдпреЗ рдПрдХ рдХрдорддрд░рддрд╛ рдЖрд╣реЗ: рдЖрдореНрд╣рд╛рд▓рд╛ рдЕреЕрд░реЗрдордзреАрд▓ рдХрд┐рдорд╛рди рдЖрдгрд┐ рдХрдорд╛рд▓ рдореВрд▓реНрдпреЗ рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ. рдпреЗрдереЗ рдореЛрдЬрдгреА рдХреНрд░рдорд╡рд╛рд░реАрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдЖрд╣реЗ:
public static int[] countingSort(int[] theArray, int maxValue) {
        // An array of "counters", ranging from 0 to the maximum value
        int numCounts[] = new int[maxValue + 1];
        // We increase the counter in the corresponding cell (index = value)
        for (int num : theArray) {
            numCounts[num]++;
        }
        // Create an array to hold the sorted result
        int[] sortedArray = new int[theArray.length];
        int currentSortedIndex = 0;
        // Run through the array of "counters"
        for (int n = 0; n < numCounts.length; n++) {
            int count = numCounts[n];
            // Run through the number of values
            for (int k = 0; k < count; k++) {
                sortedArray[currentSortedIndex] = n;
                currentSortedIndex++;
            }
        }
        return sortedArray;
    }
рдЬреЗрд╡реНрд╣рд╛ рдЖрдореНрд╣рд╛рд▓рд╛ рдХрд┐рдорд╛рди рдЖрдгрд┐ рдХрдорд╛рд▓ рдореВрд▓реНрдпреЗ рдЖрдзреАрдкрд╛рд╕реВрдирдЪ рдорд╛рд╣рд┐рдд рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЕрд╕рддреЗ рддреЗрд╡реНрд╣рд╛ рд╣реЗ рдЦреВрдк рдЧреИрд░рд╕реЛрдпреАрдЪреЗ рдЖрд╣реЗ рд╣реЗ рдЖрдкрдг рд╕рдордЬреВ рд╢рдХрддрд╛. рдЖрдгрд┐ рдЖрдореНрд╣рд╛рд▓рд╛ рдпреЗрдереЗ рдЖрдгрдЦреА рдПрдХ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдорд┐рд│рд╛рд▓рд╛ рдЖрд╣реЗ: рд░реЗрдбрд┐рдХреНрд╕ рдХреНрд░рдорд╡рд╛рд░реА. рдореА рдпреЗрдереЗ рдлрдХреНрдд рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рджреГрд╖реНрдпрджреГрд╖реНрдЯреНрдпрд╛ рд╕рд╛рджрд░ рдХрд░реЗрди. рдЕрдВрдорд▓рдмрдЬрд╛рд╡рдгреАрд╕рд╛рдареА рдкреВрд░рдХ рд╕рд╛рд╣рд┐рддреНрдп рдкрд╣рд╛: рд╕рд╛рд╣рд┐рддреНрдп:

рджреНрд░реБрдд рдХреНрд░рдорд╡рд╛рд░реА

рдмрд░рдВ, рдорд┐рдард╛рдИрдЪреА рд╡реЗрд│ рдЖрд▓реА рдЖрд╣реЗ тАФ рджреНрд░реБрдд рдХреНрд░рдорд╡рд╛рд░реА, рд╕рд░реНрд╡рд╛рдд рдкреНрд░рд╕рд┐рджреНрдз рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордкреИрдХреА рдПрдХ. рдпрд╛рдд рд▓реЙрдЧрд░рд┐рджрдорд┐рдХ рдЬрдЯрд┐рд▓рддрд╛ рдЖрд╣реЗ: O(n log n). рд╣реЗ рд╡рд░реНрдЧреАрдХрд░рдг рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЯреЛрдиреА рд╣реЛрд░реЗ рдпрд╛рдВрдиреА рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ рд╣реЛрддреЗ. рд╡рд┐рд╢реЗрд╖ рдореНрд╣рдгрдЬреЗ, рд╕реЛрд╡реНрд╣рд┐рдПрдд рдпреБрдирд┐рдпрдирдордзреНрдпреЗ рд░рд╛рд╣рдд рдЕрд╕рддрд╛рдирд╛ рддреНрдпрд╛рдВрдиреА рдпрд╛рдЪрд╛ рд╢реЛрдз рд▓рд╛рд╡рд▓рд╛, рдЬрд┐рдереЗ рддреНрдпрд╛рдВрдиреА рдореЙрд╕реНрдХреЛ рд╡рд┐рджреНрдпрд╛рдкреАрдард╛рдд рдорд╢реАрди рднрд╛рд╖рд╛рдВрддрд░рд╛рдЪрд╛ рдЕрднреНрдпрд╛рд╕ рдХреЗрд▓рд╛ рдЖрдгрд┐ рдПрдХ рд░рд╢рд┐рдпрди-рдЗрдВрдЧреНрд░рдЬреА рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдкреБрд╕реНрддрдХ рд╡рд┐рдХрд╕рд┐рдд рдХреЗрд▓реЗ. рдЗрддрдХреЗрдЪ рдХрд╛рдп, Java рдордзреНрдпреЗ рдпрд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдЖрд╡реГрддреНрддреА рд╡рд╛рдкрд░рддреЗ Arrays.sort. рдХрд╛рдп Collections.sort? "рд╣реБрдб рдЕрдВрддрд░реНрдЧрдд" рдЧреЛрд╖реНрдЯреА рдХрд╢рд╛ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд▓реНрдпрд╛ рдЬрд╛рддрд╛рдд рдпрд╛рд╡рд░ рдПрдХ рдирдЬрд░ рдХрд╛ рдЯрд╛рдХрдд рдирд╛рд╣реА? рд╣рд╛ рдХреЛрдб рдЖрд╣реЗ:
public static void quickSort(int[] source, int leftBorder, int rightBorder) {
        int leftMarker = leftBorder;
        int rightMarker = rightBorder;
        int pivot = source[(leftMarker + rightMarker) / 2];
        do {
            // Move the left marker from left to right as long as the element is less than pivot
            while (source[leftMarker] < pivot) {
                leftMarker++;
            }
            // Move the right marker as long as the element is greater than pivot
            while (source[rightMarker] > pivot) {
                rightMarker--;
            }
            // Check whether we need to swap the elements pointed to by the markers
            if (leftMarker <= rightMarker) {
                // The left marker will be less than the right one only if we need to do a swap
                if (leftMarker < rightMarker) {
                    int tmp = source[leftMarker];
                    source[leftMarker] = source[rightMarker];
                    source[rightMarker] = tmp;
                }
                // Shift the markers to get new borders
                leftMarker++;
                rightMarker--;
            }
        } while (leftMarker <= rightMarker);

        // Execute recursively on the parts
        if (leftMarker < rightBorder) {
            quickSort(source, leftMarker, rightBorder);
        }
        if (leftBorder < rightMarker) {
            quickSort(source, leftBorder, rightMarker);
        }
}
рд╣реЗ рд╕рд░реНрд╡ рдЦреВрдк рднрд┐рддреАрджрд╛рдпрдХ рд╕рд╛рдордЧреНрд░реА рдЖрд╣реЗ, рддрд░ рдЪрд▓рд╛ рддреНрдпрд╛рдд рд╢реЛрдзреВрдпрд╛. рдЗрдирдкреБрдЯ рдЕреЕрд░реЗрд╕рд╛рдареА ( int[]рд╕реНрд░реЛрдд), рдЖрдореНрд╣реА рджреЛрди рдорд╛рд░реНрдХрд░ рддрдпрд╛рд░ рдХрд░рддреЛ: рдбрд╛рд╡реЗ ( L) рдЖрдгрд┐ рдЙрдЬрд╡реЗ ( R). рдкрд╣рд┐рд▓реНрдпрд╛ рдкрджреНрдзрддреАрдЪреНрдпрд╛ рдХреЙрд▓ рджрд░рдореНрдпрд╛рди, рддреЗ рдЕреЕрд░реЗрдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрд╕ рдЖрдгрд┐ рд╢реЗрд╡рдЯрд╛рд╢реА рд╕рдВрдмрдВрдзрд┐рдд рдЕрд╕рддрд╛рдд. рдордЧ рдЖрдкрдг рдореБрдЦреНрдп рдШрдЯрдХ рдУрд│рдЦрддреЛ, рдЬреНрдпрд╛рд▓рд╛ рдпреЛрдЧреНрдп рдирд╛рд╡ рджрд┐рд▓реЗ рдЖрд╣реЗ pivot. pivotрдпрд╛рдирдВрддрд░, рдЖрдордЪреЗ рдХрд╛рд░реНрдп рдкреЗрдХреНрд╖рд╛ рд▓рд╣рд╛рди рдореВрд▓реНрдпреЗ рдбрд╛рд╡реАрдХрдбреЗ pivotрдЖрдгрд┐ рдореЛрдареНрдпрд╛ рдореВрд▓реНрдпрд╛рдВрдирд╛ рдЙрдЬрд╡реАрдХрдбреЗ рд╣рд▓рд╡рдгреЗ рдЖрд╣реЗ . рд╣реЗ рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА, LрдЬреЛрдкрд░реНрдпрдВрдд рдЖрдореНрд╣рд╛рд▓рд╛ рдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдореВрд▓реНрдп рд╕рд╛рдкрдбрдд рдирд╛рд╣реА рддреЛрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдорд╛рд░реНрдХрд░ рд╣рд▓рд╡реВ pivot. рдЬрд░ рдХреЛрдгрддреЗрд╣реА рд▓рд╣рд╛рди рдореВрд▓реНрдп рдЖрдврд│рд▓реЗ рдирд╛рд╣реА, рддрд░ L рдЪреНрдпрд╛ рдмрд░реЛрдмрд░реАрдЪреЗ рд╣реЛрддреЗ pivot. RрдкреЗрдХреНрд╖рд╛ рд▓рд╣рд╛рди рдореВрд▓реНрдп рд╕рд╛рдкрдбреЗрдкрд░реНрдпрдВрдд рдЖрдореНрд╣реА рдорд╛рд░реНрдХрд░ рд╣рд▓рд╡рддреЛ pivot. рдЬрд░ рдХреЛрдгрддреЗрд╣реА рдореЛрдареЗ рдореВрд▓реНрдп рдЖрдврд│рд▓реЗ рдирд╛рд╣реА, рддрд░ Rрдмрд░реЛрдмрд░ рд╣реЛрддреЗ pivot. рдкреБрдвреЗ, рдЬрд░ Lрдорд╛рд░реНрдХрд░ рдорд╛рд░реНрдХрд░рдЪреНрдпрд╛ рдЖрдзреА рдЕрд╕реЗрд▓ RрдХрд┐рдВрд╡рд╛ рддреНрдпрд╛рдЪреНрдпрд╛рд╢реА рдЬреБрд│рдд рдЕрд╕реЗрд▓, рддрд░ рдШрдЯрдХ LрдШрдЯрдХрд╛рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕рд▓реНрдпрд╛рд╕ рдЖрдореНрд╣реА рдШрдЯрдХ рд╕реНрд╡реЕрдк рдХрд░рдгреНрдпрд╛рдЪрд╛ рдкреНрд░рдпрддреНрди рдХрд░рддреЛ R. LрдордЧ рдЖрдкрдг 1 рдиреЗ рдЙрдЬрд╡реАрдХрдбреЗ рд╕рд░рдХрддреЛ рдЖрдгрд┐ R1 рдиреЗ рдбрд╛рд╡реАрдХрдбреЗ рд╕рд░рдХрддреЛ. рдЬреЗрд╡реНрд╣рд╛ Lрдорд╛рд░реНрдХрд░ рдорд╛рд░реНрдХрд░рдЪреНрдпрд╛ рдкрд▓реАрдХрдбреЗ рдЬрд╛рддреЛ R, рдпрд╛рдЪрд╛ рдЕрд░реНрде рд╕реНрд╡реЕрдкрд┐рдВрдЧ рдкреВрд░реНрдг рд╣реЛрддреЗ: рд▓рд╣рд╛рди рдореВрд▓реНрдпреЗ рдбрд╛рд╡реАрдХрдбреЗ рдЕрд╕рддрд╛рдд pivot, рдореЛрдареА рдореВрд▓реНрдпреЗ рдЙрдЬрд╡реАрдХрдбреЗ рдЕрд╕рддрд╛рдд. pivot. рдпрд╛рдирдВрддрд░, рдЖрдореНрд╣реА рддреНрдпрд╛рдЪ рдХреНрд░рдорд╡рд╛рд░реА рдкрджреНрдзрддреАрд▓рд╛ рдЙрдкрдЕтАНреЕрд░реЗрдЬрд╡рд░ рд░рд┐рдХрд░реНрд╕рд┐рд╡рд▓реА рдХреЙрд▓ рдХрд░рддреЛ тАФ рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд╛рдпрдЪреНрдпрд╛ рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╕реБрд░реБрд╡рд╛рддреАрдкрд╛рд╕реВрди рдЙрдЬрд╡реНрдпрд╛ рдорд╛рд░реНрдХрд░рд╡рд░ рдЖрдгрд┐ рдбрд╛рд╡реНрдпрд╛ рдорд╛рд░реНрдХрд░рдкрд╛рд╕реВрди рд╡рд┐рднрд╛рдЧрд╛рдЪреНрдпрд╛ рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд рдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рд╛рдпрдЪреА. рд╕реБрд░рд╡рд╛рддреАрдкрд╛рд╕реВрди рдпреЛрдЧреНрдп рдорд╛рд░реНрдХрд░ рдХрд╛? рдХрд╛рд░рдг рдкреБрдирд░рд╛рд╡реГрддреНрддреАрдЪреНрдпрд╛ рд╢реЗрд╡рдЯреА, рдЕрд╕реЗ рджрд┐рд╕реВрди рдпреЗрддреЗ рдХреА рдЙрдЬрд╡рд╛ рдорд╛рд░реНрдХрд░ рдбрд╛рд╡реНрдпрд╛ рднрд╛рдЧрд╛рдЪреА рд╕реАрдорд╛ рдмрдирдгреНрдпрд╛рд╕рд╛рдареА рдкреБрд░реЗрд╕рд╛ рд╣рд▓рддреЛ. рд╣реЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд╛рдзреНрдпрд╛ рдХреНрд░рдорд╡рд╛рд░реАрдкреЗрдХреНрд╖рд╛ рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗ, рдореНрд╣рдгреВрди рддреЗ рд░реЗрдЦрд╛рдЯрдгреЗ рд╕рд░реНрд╡реЛрддреНрддрдо рдЖрд╣реЗ. рдХрд╛рдЧрджрд╛рдЪреА рдкрд╛рдВрдврд░реА рд╢реАрдЯ рдШреНрдпрд╛ рдЖрдгрд┐ рд▓рд┐рд╣рд╛: 4 2 6 7 3. рдирдВрддрд░ pivotрдордзреНрдпрднрд╛рдЧреА рд▓рд┐рд╣рд╛, рдореНрд╣рдгрдЬреЗ рдХреНрд░рдорд╛рдВрдХ 6 рдЦрд╛рд▓реА. рддреНрдпрд╛рд╡рд░ рд╡рд░реНрддреБрд│рд╛рдХрд╛рд░ рдХрд░рд╛. 4 рдЪреНрдпрд╛ рдЦрд╛рд▓реА рд▓рд┐рд╣рд╛ LрдЖрдгрд┐ 3 рдЪреНрдпрд╛ рдЦрд╛рд▓реА рд▓рд┐рд╣рд╛ R. L6 рдкреЗрдХреНрд╖рд╛ 4 рдХрдореА, 6 рдкреЗрдХреНрд╖рд╛ 2 рдХрдореА. рдЖрдореНрд╣реА рд╢реЗрд╡рдЯреА рд╕реНрдерд╛рдирд╛рд╡рд░ рдЬрд╛рддреЛ pivot, рдХрд╛рд░рдг LрдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА pivot, рд╕реНрдерд┐рддреАрдиреБрд╕рд╛рд░. рдкреБрдиреНрд╣рд╛ рд▓рд┐рд╣рд╛ 4 2 6 7 3. рд╡рд░реНрддреБрд│ 6 ( pivot) рдЖрдгрд┐ LрддреНрдпрд╛рдЪреНрдпрд╛ рдЦрд╛рд▓реА рдареЗрд╡рд╛. рдЖрддрд╛ рдорд╛рд░реНрдХрд░ рд╣рд▓рд╡рд╛ R. 3 рд╣реЗ 6 рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЖрд╣реЗ, рдореНрд╣рдгреВрди рдорд╛рд░реНрдХрд░ 3 рд╡рд░ рдареЗрд╡рд╛. 3 рд╣реЗ 6 ( ) RрдкреЗрдХреНрд╖рд╛ рдХрдореА рдЕрд╕рд▓реНрдпрд╛рдиреЗ рдЖрдореНрд╣реА рдПрдХ рдХрд░рддреЛ . рдкрд░рд┐рдгрд╛рдо рд▓рд┐рд╣рд╛: 4 2 3 7 6. рд╡рд░реНрддреБрд│ 6, рдХрд╛рд░рдг рддреЗ рдЕрдЬреВрдирд╣реА рдЖрд╣реЗ . рдорд╛рд░реНрдХрд░ 3 рд╡рд░ рдЖрд╣реЗ. рдорд╛рд░реНрдХрд░ 6 рд╡рд░ рдЖрд╣реЗ. рд▓рдХреНрд╖рд╛рдд рдареЗрд╡рд╛ рдХреА рдЖрдореНрд╣реА рдорд╛рд░реНрдХрд░ рдкреБрдвреЗ рдЬрд╛рдИрдкрд░реНрдпрдВрдд рд╣рд▓рд╡рддреЛ . рдкреБрдвреАрд▓ рдХреНрд░рдорд╛рдВрдХрд╛рд╡рд░ рдЬрд╛ . рдпреЗрдереЗ рдорд▓рд╛ рджреЛрди рд╢рдХреНрдпрддрд╛ рдПрдХреНрд╕рдкреНрд▓реЛрд░ рдХрд░рд╛рдпрдЪреНрдпрд╛ рдЖрд╣реЗрдд: 1) рдЬреНрдпрд╛ рдХреЗрд╕рдордзреНрдпреЗ рдЙрдкрд╛рдВрддреНрдп рд╕рдВрдЦреНрдпрд╛ 7 рдЖрд╣реЗ рдЖрдгрд┐ 2) рдХреЗрд╕ рдЬреЗрдереЗ 1 рдЖрд╣реЗ, 7 рдирд╛рд╣реА. рдЬрд░ рдЙрдкрд╛рдВрддреНрдп рд╕рдВрдЦреНрдпрд╛ 1 рдЕрд╕реЗрд▓ рддрд░: рдорд╛рд░реНрдХрд░ 1 рд╡рд░ рд╣рд▓рд╡рд╛ , рдХрд╛рд░рдг рдЖрдкрдг рд╣рд▓рд╡реВ рд╢рдХрддреЛ рдЬреЛрдкрд░реНрдпрдВрдд pivot swap pivot L R L R L L L Lрдорд╛рд░реНрдХрд░ рдкреЗрдХреНрд╖рд╛ рд▓рд╣рд╛рди рд╕рдВрдЦреНрдпреЗрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ pivot. Rрдкрд░рдВрддреБ рдЖрдкрдг 6 рд╡рд░реВрди рдкреБрдвреЗ рдЬрд╛рдК рд╢рдХрдд рдирд╛рд╣реА , рдХрд╛рд░рдг рдЬрд░ Rрдорд╛рд░реНрдХрд░ рдкреЗрдХреНрд╖рд╛ рдореЛрдареНрдпрд╛ рд╕рдВрдЦреНрдпреЗрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢ рдХрд░рддреЛ рддрд░рдЪ рдЖрдкрдг R рд╣рд▓рд╡реВ рд╢рдХрддреЛ pivot. рдЖрдореНрд╣реА рдХрд╛рд░реНрдп рдХрд░рдд рдирд╛рд╣реА swap, рдХрд╛рд░рдг 1 6 рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЖрд╣реЗ. рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддреА рд▓рд┐рд╣рд╛: 4 2 3 1 6. рд╡рд░реНрддреБрд│ 6 ( pivot). Lрд╕рд░рдХрддреЗ pivotрдЖрдгрд┐ рд╣рд╛рд▓рдЪрд╛рд▓ рдерд╛рдВрдмрд╡рддреЗ. Rрд╣рд▓рдд рдирд╛рд╣реА. рдЖрдореНрд╣реА рд╕реНрд╡реЕрдк рдХрд░рдд рдирд╛рд╣реА. рд╢рд┐рдлреНрдЯ LрдЖрдгрд┐ RрдПрдХрд╛ рд╕реНрдерд┐рддреАрдд. R1 рдЦрд╛рд▓реА рдорд╛рд░реНрдХрд░ рд▓рд┐рд╣рд╛. Lрдорд╛рд░реНрдХрд░ рдорд░реНрдпрд╛рджреЗрдмрд╛рд╣реЗрд░ рдЖрд╣реЗ. рдХрд╛рд░рдг Lрдорд░реНрдпрд╛рджрд╛ рдмрд╛рд╣реЗрд░ рдЖрд╣реЗ, рдЖрдореНрд╣реА рдХрд╛рд╣реАрд╣реА рдХрд░рдд рдирд╛рд╣реА. рдкрд░рдВрддреБ, рдЖрдореНрд╣реА рдкреБрдиреНрд╣рд╛ 4 2 3 1 рд▓рд┐рд╣рд┐рддреЛ, рдХрд╛рд░рдг рд╣реА рдЖрдкрд▓реА рдбрд╛рд╡реА рдмрд╛рдЬреВ рдЖрд╣реЗ, рдЬреА pivot(6) рдкреЗрдХреНрд╖рд╛ рдХрдореА рдЖрд╣реЗ. рдирд╡реАрди рдирд┐рд╡рдбрд╛ pivotрдЖрдгрд┐ рд╕рд░реНрд╡рдХрд╛рд╣реА рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рд╛ :) рдЙрдкрд╛рдВрддреНрдп рдХреНрд░рдорд╛рдВрдХ 7 рдЕрд╕рд▓реНрдпрд╛рд╕:рдорд╛рд░реНрдХрд░ 7 рд╡рд░ рд╣рд▓рд╡рд╛ L. рдЖрдореНрд╣реА рдпреЛрдЧреНрдп рдорд╛рд░реНрдХрд░ рд╣рд▓рд╡реВ рд╢рдХрдд рдирд╛рд╣реА, рдХрд╛рд░рдг рддреЗ рдЖрдзреАрдкрд╛рд╕реВрди рдкрд┐рд╡реНрд╣реЛрдЯрдХрдбреЗ рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░рдд рдЖрд╣реЗ. 7 рдкреЗрдХреНрд╖рд╛ рдореЛрдареЗ рдЖрд╣реЗ pivot, рдореНрд╣рдгреВрди рдЖрдореНрд╣реА рдПрдХ рдХрд░рддреЛ swap. рдкрд░рд┐рдгрд╛рдо рд▓рд┐рд╣рд╛: 4 2 3 6 7. рд╡рд░реНрддреБрд│ 6, рдХрд╛рд░рдг рддреЗ рдЖрд╣реЗ pivot. рдорд╛рд░реНрдХрд░ LрдЖрддрд╛ 7 рд╡рд░ рд╢рд┐рдлреНрдЯ рдЭрд╛рд▓рд╛ рдЖрд╣реЗ, рдЖрдгрд┐ рдорд╛рд░реНрдХрд░ 3 рд╡рд░ рд╣рд▓рд╡рд▓рд╛ рдЖрд╣реЗ. рднрд╛рдЧрд╛рдкрд╛рд╕реВрди рд╢реЗрд╡рдЯрдкрд░реНрдпрдВрдд RрдХреНрд░рдорд╡рд╛рд░реА рд▓рд╛рд╡рдгреНрдпрд╛рд╕ рдХрд╛рд╣реА рдЕрд░реНрде рдирд╛рд╣реА , рдХрд╛рд░рдг рдлрдХреНрдд 1 рдШрдЯрдХ рдЖрд╣реЗ. рддрдерд╛рдкрд┐, рдЖрдореНрд╣реА рд╡рд░реНрдЧреАрдХрд░рдгрд╛рд╕рд╛рдареА L4 рд╡рд░реВрди рдорд╛рд░реНрдХрд░рд▓рд╛ рднрд╛рдЧ рдкрд╛рдард╡рддреЛ . RрдЖрдореНрд╣реА рдПрдХ рдирд┐рд╡рдбрддреЛ pivotрдЖрдгрд┐ рдкреБрдиреНрд╣рд╛ рд╕реБрд░реВ рдХрд░рддреЛ :) рдкрд╣рд┐рд▓реНрдпрд╛ рджреГрд╖реНрдЯреАрдХреНрд╖реЗрдкрд╛рдд, рдЕрд╕реЗ рд╡рд╛рдЯреВ рд╢рдХрддреЗ рдХреА рдЖрдкрдг рд╕рдорд╛рди рдореВрд▓реНрдпреЗ рдЬреЛрдбрд▓реНрдпрд╛рд╕ pivot, рдирдВрддрд░ рддреБрдореНрд╣реА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рдЦрдВрдбрд┐рдд рдХрд░рд╛рд▓. рдкрдг рд╣реЗ рддрд╕реЗ рдирд╛рд╣реА. рддреБрдореНрд╣реА рдЕрд╡рдШрдб рд╕рдВрдпреЛрдЬрдирд╛рдВрдЪрд╛ рд╡рд┐рдЪрд╛рд░ рдХрд░реВ рд╢рдХрддрд╛ рдЖрдгрд┐ рдХрд╛рдЧрджрд╛рд╡рд░ рд╕реНрд╡рддрдГрд▓рд╛ рдкрдЯрд╡реВрди рджреЗрдК рд╢рдХрддрд╛ рдХреА рд╕рд░реНрд╡рдХрд╛рд╣реА рдпреЛрдЧреНрдп рдЖрд╣реЗ рдЖрдгрд┐ рдЖрд╢реНрдЪрд░реНрдпрдЪрдХрд┐рдд рдХрд░рд╛ рдХреА рдЕрд╢рд╛ рд╕реЛрдкреНрдпрд╛ рдХреГрддреАрдВрдореБрд│реЗ рдЕрд╢реА рд╡рд┐рд╢реНрд╡рд╛рд╕рд╛рд░реНрд╣ рдХреНрд░рдорд╡рд╛рд░реА рдпрдВрддреНрд░рдгрд╛ рд▓рд╛рдЧреВ рд╣реЛрддреЗ. рдПрдХрдорд╛рддреНрд░ рддреЛрдЯрд╛ рдореНрд╣рдгрдЬреЗ рд╣реЗ рдХреНрд░рдорд╡рд╛рд░реА рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╕реНрдерд┐рд░ рдирд╛рд╣реА. рдХрд╛рд░рдг рд╕реНрд╡реЕрдк рд╕рд╛рд░рдЦреНрдпрд╛ рдШрдЯрдХрд╛рдВрдЪрд╛ рд╕рд╛рдкреЗрдХреНрд╖ рдХреНрд░рдо рдмрджрд▓реВ рд╢рдХрддреЛ рдЬрд░ рддреНрдпрд╛рдВрдкреИрдХреА рдПрдХрд╛рдЪрд╛ рдЖрдзреА pivotрджреБрд╕рд░рд╛ рдШрдЯрдХ рдЖрдзреАрдЪреНрдпрд╛ рднрд╛рдЧрд╛рдордзреНрдпреЗ рдЕрджрд▓рд╛рдмрджрд▓ рдХрд░рдгреНрдпрд╛рдЖрдзреА рдЖрд▓рд╛ pivot.

рддрд│ рдУрд│

рд╡рд░, рдЖрдореНрд╣реА Java рдордзреНрдпреЗ рд▓рд╛рдЧреВ рдХреЗрд▓реЗрд▓реНрдпрд╛ рд╕реЙрд░реНрдЯрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪрд╛ "рд╕рдЬреНрдЬрди" рд╕рдВрдЪ рдкрд╛рд╣рд┐рд▓рд╛. рд▓рд╛рдЧреВ рдХреЗрд▓реЗрд▓реНрдпрд╛ рджреГрд╖реНрдЯреАрдХреЛрдирд╛рддреВрди рдЖрдгрд┐ рд╡рд┐рдЪрд╛рд░ рдХрд╕рд╛ рдХрд░рд╛рд╡рд╛ рд╣реЗ рд╢рд┐рдХрдгреНрдпрд╛рдЪреНрдпрд╛ рджреГрд╖реНрдЯреАрдиреЗ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╕рд╛рдорд╛рдиреНрдпрддрдГ рдЙрдкрдпреБрдХреНрдд рдЕрд╕рддрд╛рдд. рдХрд╛рд╣реА рд╕реЛрдкреЗ рдЖрд╣реЗрдд, рдХрд╛рд╣реА рдЕрдзрд┐рдХ рдХреНрд▓рд┐рд╖реНрдЯ рдЖрд╣реЗрдд. рд╣реБрд╢рд╛рд░ рд▓реЛрдХрд╛рдВрдиреА рдХрд╛рд╣реАрдВрд╕рд╛рдареА рддреНрдпрд╛рдВрдЪреНрдпрд╛ рдкреНрд░рдмрдВрдзрд╛рдВрдЪрд╛ рдмрдЪрд╛рд╡ рдХреЗрд▓рд╛. рдЗрддрд░рд╛рдВрд╕рд╛рдареА, рддреНрдпрд╛рдВрдиреА рдЦреВрдк рдЬрд╛рдб рдкреБрд╕реНрддрдХреЗ рд▓рд┐рд╣рд┐рд▓реА. рдорд▓рд╛ рдЖрд╢рд╛ рдЖрд╣реЗ рдХреА рдкреВрд░рдХ рд╕рд╛рдордЧреНрд░реА рддреБрдореНрд╣рд╛рд▓рд╛ рдЖрдгрдЦреА рд╢рд┐рдХрдгреНрдпрд╛рд╕ рдорджрдд рдХрд░реЗрд▓, рдХрд╛рд░рдг рд╣рд╛ рд▓реЗрдЦ рдлрдХреНрдд рдПрдХ рд╡рд┐рд╣рдВрдЧрд╛рд╡рд▓реЛрдХрди рдЖрд╣реЗ рдЬреЛ рдЖрдзреАрдЪ рд╡рдЬрдирджрд╛рд░ рдЕрд╕рд▓реНрдпрд╛рдЪреЗ рджрд┐рд╕реВрди рдЖрд▓реЗ рдЖрд╣реЗ. рдЖрдгрд┐ рддреНрдпрд╛рдЪрд╛ рдЙрджреНрджреЗрд╢ рдПрдХ рдЫреЛрдЯрд╛рд╕рд╛ рдкрд░рд┐рдЪрдп рджреЗрдгреЗ рд╣рд╛ рдЖрд╣реЗ. рддреБрдореНрд╣реА "рдЧреНрд░реЛрдХрд┐рдВрдЧ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо " рд╡рд╛рдЪрд▓реНрдпрд╛рд╕ рддреБрдореНрд╣рд╛рд▓рд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдордЪреА рдУрд│рдЦ рджреЗрдЦреАрд▓ рдорд┐рд│реЗрд▓ . рдорд▓рд╛ рдЬреЕрдХ рдмреНрд░рд╛рдЙрдирдЪреА рдкреНрд▓реЗрд▓рд┐рд╕реНрдЯ рджреЗрдЦреАрд▓ рдЖрд╡рдбрддреЗ: AQA рдирд┐рд░реНрдгрдп 1 1.01 рдЯреНрд░реЗрд╕рд┐рдВрдЧ рдЕреЕрди рдЕрд▓реНрдЧреЛрд░рд┐рджрдо . рдордиреЛрд░рдВрдЬрдирд╛рд╕рд╛рдареА, рддреБрдореНрд╣реА рдХреНрд░рдорд╡рд╛рд░реА рдХрд░рддрд╛рдирд╛ рдЕрд▓реНрдЧреЛрд░рд┐рджрдо рд╡реНрд╣рд┐рдЬреНрдпреБрдЕрд▓рд╛рдпрдЭреЗрд╢рди рдкрд╛рд╣реВ рд╢рдХрддрд╛. visualgo.net _
рдЯрд┐рдкреНрдкрдгреНрдпрд╛
  • рд▓реЛрдХрдкреНрд░рд┐рдп
  • рдирд╡реАрди
  • рдЬреБрдиреЗ
рдЯрд┐рдкреНрдкрдгреА рдХрд░рдгреНрдпрд╛рд╕рд╛рдареА рддреБрдореНрд╣реА рд╕рд╛рдИрди рдЗрди рдХреЗрд▓реЗрд▓реЗ рдЕрд╕рдгреЗ рдЖрд╡рд╢реНрдпрдХ рдЖрд╣реЗ
рдпрд╛ рдкрд╛рдирд╛рд╡рд░ рдЕрдЬреВрди рдХреЛрдгрддреНрдпрд╛рд╣реА рдЯрд┐рдкреНрдкрдгреНрдпрд╛ рдирд╛рд╣реАрдд