Quicksort in C++

本文详细介绍了快速排序算法的核心过程——分区过程,并提供了具体的实现代码。快速排序采用分治策略,通过分区将数组分为两部分,左边的元素都不大于基准,右边的元素都大于基准,然后递归地对左右两个子数组进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

/*
The PARTITION procedure is the key to the QUICKSORT algorithm, it rearranges
the subarray A[p...r] in place. PARTITION always selects an element A[r] as a
pivot element around which to partition the subarray A[p...r].
As the procedure runs, the array is partitioned into four (possibly empty)
regions: the values in A[p...i] are all less than or equal to the pivot, the
values in A[(i+1)...(j-1)] are all greater than the pivot, the values in
A[j...(r-1)] can take on any values, and the pivot A[r].
*/
int partition(int A[], int p, int r) {
    int pivot = A[r];
    int i = p - 1;
   
    for (int j = p; j < r; ++j) {
        if (A[j] <= pivot) {
            ++i;
            exchange(&A[i], &A[j]);
        }
    }
       
    exchange(&A[i + 1], &A[r]);
   
    return i + 1;
}

/*
Quicksort, like merge sort, is based on the divide-and-conquer paradigm.
Here is the three-step divide-and-conquer process for sorting a typical
subarray A[p...r]:
Divide: Partition (rearrange) the array A[p...r] into two (possibly empty)
subarrays A[p...(q-1)] and A[(q+1)...r] such that each element of A[p...(q-1)]
is less than or equal to A[q], which is, in turn, less than or equal to each
element of A[(q+1)...r]. Compute the index q as part of this partitioning
procedure.
Conquer: Sort the two subarrays A[p...(q-1)] and A[(q+1)...r] by recursive
calls to quicksort.
Combine: Since the subarrays are sorted in place, no work is needed to combine
them, the entire array A[p...r] is now sorted.
*/
void quicksort(int A[], int p, int r) {
    if (p >= r) return;
   
    int q = partition(A, p, r);
    quicksort(A, p, q - 1);
    quicksort(A, q + 1, r);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值