#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 pivotIdx = partition(arr, low, high); quickSort(arr, low, pivotIdx - 1); quickSort(arr, pivotIdx + 1, high); } } // 数组倒序 void reverseArray(std::vector<int>& arr) { int start = 0; int end = arr.size() - 1; while (start < end) { std::swap(arr[start], arr[end]); start++; end--; } } int main() { std::vector<int> arr = {}; // 快速排序 quickSort(arr, 0, arr.size() - 1); std::cout << "快速排序后的数组:"; for (int num : arr) { std::cout << num << " "; } std::cout << std::endl; // 数组倒序 reverseArray(arr); std::cout << "数组倒序结果:"; for (int num : arr) { std::cout << num << " "; } std::cout << std::endl; return 0; }注释
时间: 2024-04-16 20:30:05 浏览: 103
这是一个包含快速排序和数组倒序功能的程序。它使用了两个函数:quickSort和reverseArray。
quickSort函数实现了快速排序算法。它接受一个整数向量arr,以及数组的低位索引和高位索引。算法的主要思想是选择一个基准元素(这里选择了最后一个元素),将数组分成两部分,小于基准元素的放在左边,大于基准元素的放在右边,然后递归地对左右两部分进行快速排序。
partition函数用于确定基准元素的最终位置。它接受一个整数向量arr,以及数组的低位索引和高位索引。在这个函数中,通过遍历数组并将小于基准元素的元素交换到左边,最终将基准元素放置在正确的位置上。
reverseArray函数用于将数组倒序。它接受一个整数向量arr,并使用两个指针start和end来交换元素,以实现数组的倒序。
在主函数中,程序首先定义了一个空的整数向量arr。然后,它调用quickSort函数对arr进行排序,并输出排序后的结果。接着,它调用reverseArray函数对arr进行倒序,并输出倒序后的结果。
最后,程序返回0表示正常运行结束。
如果你对这段代码有任何疑问,请随时提问。
相关问题
vector快速排序
要使用快速排序算法对向量进行排序,可以按照以下步骤进行操作:
1. 选择一个基准元素(通常是向量的第一个元素)作为比较对象。
2. 将向量分成两个子向量,一个包含比基准元素小的元素,另一个包含比基准元素大的元素。这个过程称为分区(partitioning),可以使用双指针法或者递归实现。
3. 对两个子向量分别递归地应用快速排序算法。
4. 将两个排序好的子向量合并起来,得到最终的排序结果。
下面是一个示例的C++代码实现:
```cpp
#include <iostream>
#include <vector>
// 分区函数,返回基准元素的最终位置
int partition(std::vector<int>& arr, int low, int high) {
int pivot = arr[low]; // 选择第一个元素作为基准
int i = low + 1; // 左指针
int j = high; // 右指针
while (i <= j) {
if (arr[i] <= pivot) {
i++;
} else if (arr[j] > pivot) {
j--;
} else {
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[low], arr[j]); // 将基准元素放到正确的位置上
return j;
}
// 快速排序函数
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 = {5, 2, 9, 1, 6, 3};
quickSort(arr, 0, arr.size() - 1);
for (int num : arr) {
std::cout << num << " ";
}
std::cout << std::endl;
return 0;
}
```
这段代码使用了递归实现快速排序算法,将基准元素放到正确的位置上后,再对左右子向量分别进行排序。最终输出排序后的向量:1 2 3 5 6 9。
c++ partition快速排序代码
下面是一个使用partition函数实现快速排序的C++代码示例:
```cpp
#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 pivot = partition(arr, low, high);
quickSort(arr, low, pivot - 1);
quickSort(arr, pivot + 1, high);
}
}
int main() {
std::vector<int> arr = {10, 7, 8, 9, 1, 5};
int n = arr.size();
quickSort(arr, 0, n - 1);
std::cout << "Sorted array: \n";
for (int i = 0; i < n; i++) {
std::cout << arr[i] << " ";
}
return 0;
}
```
这段代码使用了partition函数来选择一个枢纽元素,并通过将较小的元素放在其左侧、较大的元素放在其右侧的方式,将数组分割成两个部分。然后,对这两个部分递归地进行快速排序,直到整个数组有序。
注意:此代码示例仅用于演示快速排序的实现方式,并不是最优化的算法实现。在实际应用中,你可能需要考虑对算法进行改进以提高性能和处理边界情况。
阅读全文