contoh list => 10, 7, 8, 9, 1, 5
arr = [10, 7, 8, 9, 1, 5]
for the line of code:
void quickSort(List<int> arr, int low, int high) {
if (low >= high) return;
int pi = partision(arr, low, high);
quickSort(arr, low, pi - 1);
quickSort(arr, pi + 1, high);
}
Flow dimulai dari line per line. Dimulai dari :
- Kondisi antara low dan high (Jika kondisi low lebih besar dan sama dengan high)
- Partision
- quicSort sisi kiri pivot (range 0 - index sebelum pivot baru (setela partision))
- quicSort sisi kanan pivot (range pivot baru - index terakhir)
1st Line : if (low >= high)
Note : Bagian ini untuk menghentikan quickSort karena bisa saja index pada pivot lebih kecil dari low
atau lebih besar dari high saat proses sorting setelah partising pertama. Hal ini bisa terjadi karena
dalam proses sorting:
- index pada pivot selalu berpindah ketika partising selesai
- setelah partising pertama, list akan dibagi 2 antara index 0 sampai index sebelum pivot dan
index setelah pivot sampai akhir length. Lalu setelah partising, kedua list akan melakukan hal yang sama
(partising dan membagi list) dan akan berakhir sampai kondisiif (low >= high)
tercapai
2nd Line : Partision
arr = [10, 7, 8, 9, 1, 5];
partision(arr, low, high)
=> partision(arr, 0, arr.length - 1)
=> parameter value:
arr = [10, 7, 8, 9, 1, 5]
low = 0;
high = length - 1
=>high = (6) - 1
high = 5
int pivot = arr[high];
=> int pivot = arr[5];
int pivot = 5;
int i = low - 1;
=> int i = (0) - 1;
int i = -1;
int j = low;
=> int j = 0
through while
: (condition j <= high - 1
=> j <= (5) - 1``j <= 4
) (Range index(j
) : 0 - 4)
while j = 0 :
if (arr[j] < pivot)
=> if (arr[0] < 5)
if (10 < 5)
(FALSE) :
no execution
j++
j = 0 => j = 1
while j = 1 :
if (arr[j] < pivot)
=> if (arr[1] < 5)
if (7 < 5)
(FALSE) :
no execution
j++
j = 1 => j = 2
while j = 2 :
if (arr[j] < pivot)
=> if (arr[2] < 5)
if (8 < 5)
(FALSE) :
no execution
j++
j = 2 => j = 3
while j = 3 :
if (arr[j] < pivot)
=> if (arr[3] < 5)
if (9 < 5)
(FALSE) :
no execution
j++
j = 3 => j = 4
while j = 4 :
if (arr[j] < pivot)
=> if (arr[4] < 5)
if (1 < 5)
(TRUE) :
>----execute :
i++;
i = -1 => i = 0
Go to (function) swap (inside if):
partision : int swap(List<int> arr, int i, int j)
parameter current value:
i = i
=>i = 0
j = j
=>i = 4
int temp = arr[i];
=> int temp = arr[0]
int temp = 10
arr[i] = arr[j];
=> arr[0] = arr[4]
arr[0] = 1
arr[j] = temp;
=> arr[4] = temp
arr[4] = 10
>----execute end
| Status : now the current arr => [1, 7, 8, 9, 10, 5]
j++
j = 4 => j = 5
While End
Go to (function) swap (outside while):
partision : int swap(List<int> arr, int i, int j)
parameter current value:
i = i + 1
=>i = (0) + 1
i = 1
j = high
=>j = 5
int temp = arr[i];
=> int temp = arr[1]
int temp = 7
arr[i] = arr[j];
=> arr[1] = arr[5]
arr[1] = 5
arr[j] = temp;
=> arr[5] = temp
arr[5] = 7
now the current arr => [1, 5, 8, 9, 10, 7]
return i + 1;
=> return (0) + 1
return 1