Java 在快速排序应用程序中,这些交换代码行的用途是什么?

Java 在快速排序应用程序中,这些交换代码行的用途是什么?,java,arrays,algorithm,sorting,quicksort,Java,Arrays,Algorithm,Sorting,Quicksort,我试图理解快速排序的实现或应用程序,以找到第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 &g

我试图理解快速排序的实现或应用程序,以找到第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;
}

您可以在以下位置使用分区算法:


您使用的算法返回错误的pivot

您测试过代码吗?在我看来这不正确。它只检查第一个元素>=pivot,最后一个元素是什么意思?它确实会检查数组的其余部分,就像你将pivot与第k个元素进行比较一样,如果pivot大于你之前检查的部分,否则在我看来代码也不正确后检查部分,所以我测试了它,实际上它不起作用……交换的目的是进行排序。没有交换就没有排序,
if(i < j) {
        swap(a, i, j);
}
        swap(a,j, pivot);