下面是一个使用容器C++实现快速排序的示例代码,不使用函数的方式:

#include <iostream>
#include <vector>
#include <stack>

void quickSort(std::vector<int>& nums) {
    std::stack<std::pair<int, int>> stk;
    stk.push({0, nums.size() - 1});

    while (!stk.empty()) {
        int start = stk.top().first;
        int end = stk.top().second;
        stk.pop();

        int pivot = nums[start];
        int left = start + 1;
        int right = end;

        while (left <= right) {
            while (left <= right && nums[left] <= pivot) {
                left++;
            }
            while (left <= right && nums[right] > pivot) {
                right--;
            }
            if (left < right) {
                std::swap(nums[left], nums[right]);
            }
        }

        std::swap(nums[start], nums[right]);

        if (start < right - 1) {
            stk.push({start, right - 1});
        }
        if (right + 1 < end) {
            stk.push({right + 1, end});
        }
    }
}

int main() {
    std::vector<int> nums = {5, 2, 9, 1, 3, 7};
    quickSort(nums);
    for (int num : nums) {
        std::cout << num << " ";
    }
    std::cout << std::endl;
    return 0;
}

这段代码使用了一个栈来保存待排序的子数组的起始和结束位置。初始时,将整个数组的起始和结束位置压入栈中。然后,每次从栈中弹出一个子数组的起始和结束位置,进行快速排序的操作。在排序过程中,使用左右两个指针分别从子数组的两端向中间移动,找到第一个大于基准值和第一个小于等于基准值的元素,然后交换它们的位置。最后,将基准值放到正确的位置上。然后,将左右两个子数组的起始和结束位置分别压入栈中,继续下一轮的排序操作。直到栈为空,排序完成

使用容器c++完成快速排序应用不使用函数

原文地址: http://www.cveoy.top/t/topic/iUCg 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录