Какова цель этих строк кода подкачки в приложении быстрой сортировки?

Я пытаюсь понять реализацию или приложение быстрой сортировки, чтобы найти k-й наименьший элемент. Вот код, который я пытаюсь понять.

public int quicksort(int a[], int start, int end, int k) {
    if(start < end) {
        int pivot = partition(a, start, end);
        if(pivot == k -1) {
            return pivot;
        } else if(pivot > k - 1){
            return quicksort(a, start, pivot, k);
        } else {
            return quicksort(a, pivot + 1, end, k);
        }
    } else if(start == end) {
        return k==1?start:-1;
    } else {
        return -1;
    }
}
public int partition(int a[], int start, int end) {
    int pivot = start;
    int i = pivot + 1;
    int j = end;
    while(a[i] < a[pivot] && i < end) {
        i ++;
    } 
    while(a[j] > a[pivot] && j >= 0) {
        j --;
    } 
    if(i < j) {
        swap(a, start, end);
    }
    swap(a,j, pivot);
    return pivot;
}
private void swap(int a[], int swap1, int swap2) {
    int temp = a[swap1];
    a[swap1] = a[swap2];
    a[swap2] = temp;
}

Я понимаю, что, пытаясь найти k-й наименьший элемент, вы хотите использовать быструю сортировку, потому что элементы слева от центра будут меньше, чем элементы, а элементы справа от центра будут больше, чем. Таким образом, если вы пытаетесь найти 4-й наименьший элемент, а пивот находится с индексом 3, вы можете просто вернуть его, потому что знаете, что он 4-й наименьший, так как на 3 элемента меньше его.

У меня проблемы с пониманием двух перестановок в методе раздела.

По завершении первого цикла while индекс i будет находиться в положении, в котором все элементы, меньшие, чем точка поворота, будут слева от i. Индекс j будет в положении, в котором все элементы больше, чем точка поворота, будут справа от j.

Какова цель этого кода подкачки внутри раздела? Кто-нибудь может привести пример, почему этот код необходим? Как они встретятся?

if(i < j) {
        swap(a, i, j);
}

А также для этой строки подкачки (также внутри раздела), почему автор поменял pivot и j, а не pivot и i? Это произвольно?

        swap(a,j, pivot);

Ответы на вопрос(1)

Ваш ответ на вопрос