使用容器c++完成快速排序应用不使用函数
下面是一个使用容器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;
}
这段代码使用了一个栈来保存待排序的子数组的起始和结束位置。初始时,将整个数组的起始和结束位置压入栈中。然后,每次从栈中弹出一个子数组的起始和结束位置,进行快速排序的操作。在排序过程中,使用左右两个指针分别从子数组的两端向中间移动,找到第一个大于基准值和第一个小于等于基准值的元素,然后交换它们的位置。最后,将基准值放到正确的位置上。然后,将左右两个子数组的起始和结束位置分别压入栈中,继续下一轮的排序操作。直到栈为空,排序完成
原文地址: http://www.cveoy.top/t/topic/iUCg 著作权归作者所有。请勿转载和采集!