只有两个参数的快速排序

QuickSort with only two arguments

如何构造一个以数组和数组长度作为两个参数的快速排序算法?

即:

void quick_sort(int A[], int n)

像这样。

但是,我只熟悉用 3 个参数、一个数组、最低索引和最高索引编写快速排序。

下面的 Quicksort 函数有 3 个参数,arrlh

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <string.h>

void swap(int *a, int *b) {
    int temp = *a;
    *a = *b;
    *b = temp;
}

int partition(int arr[], int l, int h) {
    int pivot = arr[l];
    int i = l;
    int j = h;

    while (i < j) {

        while (arr[i] <= pivot) {
            i++;
        }
        while (arr[j] > pivot) {
            j--;
        }
        if (i < j) {
            swap(&arr[j], &arr[i]);
        }
    }
    swap(&arr[l], &arr[j]);
    return j;
}

void quickSort(int arr[], int l, int h) {
    if (l < h) {
        int j = partition(arr, l, h);
        quickSort(arr, l, j - 1);
        quickSort(arr, j + 1, h);
    }
}

但是,我需要编写一个只有两个参数的 QuickSort 实现。

如何编写进行相同排序的函数? 也就是说,我们只有 n 的长度,而上面完整的快速排序算法有 lh 作为参数。

很多代码为实际工作函数提供了一个很好的接口。例如,快速排序算法可能将其自身呈现为:

void quickSort( int * xs, int n );

但实现为:

static int partition( int * xs, int left, int right )
{
  ...
}

static void quickSort_( int * xs, int left, int right )
{
  ...
}

void quickSort( int * xs, int n )
{
  quickSort_( xs, 0, n );
}

注意实际的主力函数是如何static 到用户看不到它们的库。