快速排序 (C++ 实现)

1,206 阅读2分钟

快速排序是一种高效的排序算法,它使用分治的思想将一个数组分成两个子数组,然后递归地对子数组进行排序。下面是用C++实现快速排序的示例代码:

#include <iostream>
#include <vector>

int partition(std::vector<int>& arr, int low, int high) {
    int pivot = arr[high];
    int i = low - 1;
    for (int j = low; j < high; j++) {
        if (arr[j] < pivot) {
            i++;
            std::swap(arr[i], arr[j]);
        }
    }
    std::swap(arr[i + 1], arr[high]);
    return i + 1;
}

void quickSort(std::vector<int>& arr, int low, int high) {
    if (low < high) {
        int pivotIndex = partition(arr, low, high);
        quickSort(arr, low, pivotIndex - 1);
        quickSort(arr, pivotIndex + 1, high);
    }
}

int main() {
    std::vector<int> arr = {64, 34, 25, 12, 22, 11, 90};
    quickSort(arr, 0, arr.size() - 1);
    std::cout << "Sorted array: ";
    for (int i = 0; i < arr.size(); i++) {
        std::cout << arr[i] << " ";
    }
    std::cout << std::endl;
    return 0;
}

在这个示例中,我们使用了一个std::vector<int>来存储待排序的数组。partition函数用于将数组划分为两个子数组,并返回枢轴元素的最终位置。

快速排序算法的核心是递归。quickSort函数接受一个数组和两个索引参数,表示当前需要排序的子数组的范围。在每一次递归调用中,我们选择一个枢轴元素,并将数组划分为小于枢轴和大于枢轴的两个子数组。然后,递归地对子数组进行排序,直到子数组的大小为1或0。

partition函数中,我们选择数组的最后一个元素作为枢轴元素。然后,使用两个指针ij,分别从数组的左边和右边开始遍历。如果遇到一个小于枢轴的元素,就将它与i指针指向的元素交换位置,并将i指针向右移动。最后,将枢轴元素放到i指针的位置,并返回i作为枢轴元素的最终位置。

最后,我们在main函数中调用quickSort函数对数组进行排序,并输出排序后的结果。

以上就是用C++实现快速排序的示例代码。快速排序是一种高效的排序算法,平均时间复杂度为O(nlogn),适用于大规模的排序任务。在实际应用中,快速排序是常用的排序算法之一。