📅  最后修改于: 2023-12-03 14:56:20.470000             🧑  作者: Mango
这是一个用于对只包含 0、1 和 2 的数组进行排序的 C++ 程序。该排序算法可以将数组中的元素按照升序排列,其中 0 代表最小值,2 代表最大值。
该排序算法采用了三向切分快速排序(Dutch National Flag algorithm)的变种。算法通过遍历数组的元素,并根据元素的值进行交换,最终将 0 放在数组的前部分,将 2 放在数组的后部分,中间部分则为 1。
算法步骤如下:
创建三个指针,分别为 low、mid 和 high,初始时 low 和 mid 都指向数组的起始位置,high 指向数组的末尾位置。
遍历数组,直到 mid 指针超过 high 指针:
重复步骤 2 直到 mid 指针超过 high 指针。
下面是用于对 0、1 和 2 的数组进行排序的 C++ 程序示例代码:
#include <iostream>
#include <vector>
void sortArray(std::vector<int>& nums) {
int low = 0;
int mid = 0;
int high = nums.size() - 1;
while (mid <= high) {
if (nums[mid] == 0) {
std::swap(nums[mid], nums[low]);
low++;
mid++;
} else if (nums[mid] == 1) {
mid++;
} else {
std::swap(nums[mid], nums[high]);
high--;
}
}
}
int main() {
std::vector<int> nums = {2, 0, 2, 1, 1, 0};
sortArray(nums);
std::cout << "Sorted Array: ";
for (const auto& num : nums) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
程序运行结果如下:
Sorted Array: 0 0 1 1 2 2
通过这个程序,我们可以对只包含 0、1 和 2 的数组进行排序,将数组中的元素按照升序排列。该排序算法的时间复杂度为 O(n),其中 n 为数组的长度。这个算法在解决某些特定问题时非常有用,例如荷兰国旗问题。