Π—Π°ΠΊΠ°Π·Π°Ρ‚ΡŒ курсовыС, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒΠ½Ρ‹Π΅, Ρ€Π΅Ρ„Π΅Ρ€Π°Ρ‚Ρ‹...
ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π½Π° Π·Π°ΠΊΠ°Π·. НСдорого!

Быстрая сортировка. 
РСкурсия ΠΊΠ°ΠΊ способ ΠΎΡ€Π³Π°Π½ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ Π΄Π°Π½Π½Ρ‹Ρ…

Π Π΅Ρ„Π΅Ρ€Π°Ρ‚ΠŸΠΎΠΌΠΎΡ‰ΡŒ Π² Π½Π°ΠΏΠΈΡΠ°Π½ΠΈΠΈΠ£Π·Π½Π°Ρ‚ΡŒ ΡΡ‚ΠΎΠΈΠΌΠΎΡΡ‚ΡŒΠΌΠΎΠ΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹

Быстрая сортировка (Π°Π½Π³Π». 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 — Π”Смонстрация выполнСния Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° быстрой сортировки

ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ вСсь тСкст
Π—Π°ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΎΠΉ