ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°.
Π Π΅ΠΊΡΡΡΠΈΡ ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° (Π°Π½Π³Π». quicksort) — ΡΡΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π±Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ, Π½ΠΎ ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π₯ΠΎΠ°ΡΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π°Π²ΡΠΎΡΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π§Π°ΡΠ»ΡΠ·Π° Π₯ΠΎΠ°ΡΠ°. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ… Π§ΠΈΡΠ°ΡΡ Π΅ΡΡ >
ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ°. Π Π΅ΠΊΡΡΡΠΈΡ ΠΊΠ°ΠΊ ΡΠΏΠΎΡΠΎΠ± ΠΎΡΠ³Π°Π½ΠΈΠ·Π°ΡΠΈΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ (ΡΠ΅ΡΠ΅ΡΠ°Ρ, ΠΊΡΡΡΠΎΠ²Π°Ρ, Π΄ΠΈΠΏΠ»ΠΎΠΌ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΡΠ½Π°Ρ)
ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° (Π°Π½Π³Π». quicksort) — ΡΡΠΎ Π½Π°Π΄Π΅ΠΆΠ½ΡΠΉ ΠΈ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ Π°Π»Π³ΠΎΡΠΈΡΠΌ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΡΠ΅Π±Π½ΡΡ ΡΠ΅Π»Π΅ΠΉ, Π½ΠΎ ΠΈ ΡΠΈΡΠΎΠΊΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅ΡΡΡ Π½Π° ΠΏΡΠ°ΠΊΡΠΈΠΊΠ΅. ΠΡΡΡΡΠ°Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΠΊΠΆΠ΅ Π½Π°Π·ΡΠ²Π°Π΅ΡΡΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π₯ΠΎΠ°ΡΠ° ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ Π°Π²ΡΠΎΡΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π§Π°ΡΠ»ΡΠ·Π° Π₯ΠΎΠ°ΡΠ°. ΠΠ»Ρ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ² ΡΡΠΎΡ ΠΌΠ΅ΡΠΎΠ΄ ΡΡΠ΅Π±ΡΠ΅Ρ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΎΠ±ΠΌΠ΅Π½ΠΎΠ² ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΠΈ ΡΡΠ°Π²Π½Π΅Π½ΠΈΠΉ, ΡΠΎ Π΅ΡΡΡ Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅, ΡΠ΅ΠΌ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΡΠ½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ. ΠΠ΅ΡΠΎΠ΄ ΠΎΡΠ½ΠΎΠ²Π°Π½ Π½Π° ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π΅ «ΡΠ°Π·Π΄Π΅Π»ΡΠΉ ΠΈ Π²Π»Π°ΡΡΠ²ΡΠΉ». ΠΠ΄Π΅Ρ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½Π° ΠΏΡΠΎΡΡΠ°. ΠΠ· ΠΌΠ°ΡΡΠΈΠ²Π° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΠΎΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Ρ, Π²ΠΎΠΊΡΡΠ³ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΡΠΈΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ΅Π½ΡΡΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΡΠ°Π²Π½ΡΠ΅ Ρ, ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ°ΡΡΡΡ Π²Π»Π΅Π²ΠΎ ΠΎΡ Π½Π΅Π³ΠΎ, Π° ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ Π±ΠΎΠ»ΡΡΠΈΠ΅, Π»ΠΈΠ±ΠΎ ΡΠ°Π²Π½ΡΠ΅ Ρ — Π²ΠΏΡΠ°Π²ΠΎ. ΠΠ°Π»Π΅Π΅ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΠΈΠΌΠ΅Π΅Ρ Π½Π°ΠΈΠΌΠ΅Π½ΡΡΠ΅Π΅ Π²ΡΠ΅ΠΌΡ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π²ΡΠ±ΠΈΡΠ°Π΅ΡΡΡ ΡΡΠ΅Π΄Π½ΠΈΠΉ ΠΏΠΎ Π½ΠΎΠΌΠ΅ΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ ΡΠ°ΡΡΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° ΠΈΠΌΠ΅ΡΡ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ.
ΠΠ°Π΄Π°ΡΠ° 6.6 ΠΠ°ΠΏΠΈΡΠΈΡΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°.
ΠΠ±ΡΡΡΠ½Π΅Π½ΠΈΠ΅: Π²Π²Π΅Π΄Π΅ΠΌ Π΄Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ° i ΠΈ j, Π² Π½Π°ΡΠ°Π»Π΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΠΎΠ½ΠΈ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ, ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ, Π½Π° Π»Π΅Π²ΡΠΉ ΠΈ ΠΏΡΠ°Π²ΡΠΉ ΠΊΠΎΠ½Π΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ°ΡΠ½Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ i Ρ ΡΠ°Π³ΠΎΠΌ 1 ΠΏΠΎ ΠΌΠ°ΡΡΠΈΠ²Ρ Π²ΠΏΠ΅ΡΠ΅Π΄, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ°ΡΠ΅ΠΌ Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΡΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ Π΄Π²ΠΈΠ³Π°Π΅ΠΌ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ j ΠΎΡ ΠΊΠΎΠ½ΡΠ° ΠΌΠ°ΡΡΠΈΠ²Π° ΠΊ Π½Π°ΡΠ°Π»Ρ, ΠΏΠΎΠΊΠ° Π½Π΅ Π±ΡΠ΄Π΅Ρ Π½Π°ΠΉΠ΄Π΅Π½ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Π½ΡΡΠΈΠΌ ΠΈΠ»ΠΈ ΡΠ°Π²Π½ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠΏΠΎΡΠ½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°. ΠΠ°Π»Π΅Π΅, Π΅ΡΠ»ΠΈ i<=j, ΠΌΠ΅Π½ΡΠ΅ΠΌ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ΅ΡΡΠ°ΠΌΠΈ ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Π΅ΠΌ Π΄Π²ΠΈΠ³Π°ΡΡ i ΠΈ j. ΠΠ»Π³ΠΎΡΠΈΡΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΠΌ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π°ΠΈΠ½Π΄Π΅ΠΊΡ i ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° j. ΠΠΎΡΠ»Π΅ ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΡ Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄ΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ° i ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½Ρ ΠΎΠΏΠΎΡΠ½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π° Π²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠ»Π΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ° j Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ»ΠΈ ΡΠ°Π²Π½Ρ ΠΎΠΏΠΎΡΠ½ΠΎΠΌΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ. ΠΠ°Π»Π΅Π΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΌΠ΅ΡΠΎΠ΄ Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°. ΠΡΠΈΠΌΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΌΠ°ΡΡΠΈΠ²Π° {5, 0, -10, 9, 15, 100, -12, 3} ΠΈΠ»Π»ΡΡΡΡΠΈΡΡΠ΅Ρ ΡΠΈΡ. 6.5. ΠΠ° ΡΠΈΡΡΠ½ΠΊΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π½ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠ°Π³ ΡΠ΅ΠΊΡΡΡΠΈΠΈ. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΠΎΠ΄ΠΌΠ°ΡΡΠΈΠ²Ρ {5, 0, -10, 3, -12} ΠΈ {100, 15, 9} ΡΠΎΡΡΠΈΡΡΡΡΡΡ Π·Π°ΡΠ΅ΠΌ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΠΎ. Π£ΡΠ»ΠΎΠ²ΠΈΠ΅ΠΌ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΡ Π²ΡΠ·ΠΎΠ²ΠΎΠ² ΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π°Π»ΠΈΡΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ° Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΠ· ΡΠ°ΡΡΠ΅ΠΉ ΠΌΠ°ΡΡΠΈΠ²Π°.
public class QuickSort {.
static void quickSort (int[] a, int left, int right) {.
int i=left, j=right;
int p=a[(left+right)/2]; //ΠΎΠΏΠΎΡΠ½ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ.
int tmp;
// ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅.
do {.
while (a[i].
while (a[j]>p) j—;
if (i<=j) {.
tmp=a[i]; a[i]=a[j]; a[j]=tmp;
i++; j—;
}.
} while (i<=j);
// ΡΠ΅ΠΊΡΡΡΠΈΠ²Π½ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ.
if (j>left) quickSort (a, left, j);
if (i.
}.
public static void main (String[]args) {.
int[] a = {5,0,-10,9,15,100,-12,3};
quickSort (a, 0, a. length-1);
System.out.println (java.util.Arrays.toString (a));
}}.
Π Π΅Π·ΡΠ»ΡΡΠ°Ρ:
[-12, -10, 0, 3, 5, 9, 15, 100].
Π ΠΈΡ. 6.5 — ΠΠ΅ΠΌΠΎΠ½ΡΡΡΠ°ΡΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° Π±ΡΡΡΡΠΎΠΉ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ