请用【c++】帮我写一段快排代码,并帮我讲解下实现逻辑:创建一个动态数组,判断动态数组中是否有某个字符串
时间: 2024-10-18 20:16:30 浏览: 41
C++两个一维数组相加求和
当然可以。以下是使用 C++ 编写的快速排序算法以及如何结合查找功能(查找特定字符串)的一个简单示例:
```cpp
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
// 快速排序函数
void quickSort(std::vector<std::string>& arr, int left, int right) {
if (left < right) {
// 选取基准值
int pivotIndex = left + (right - left) / 2;
std::string pivot = arr[pivotIndex];
// 分割数组
int i = left, j = right;
while (i <= j) {
while (arr[i] < pivot) {
i++;
}
while (arr[j] > pivot) {
j--;
}
if (i <= j) {
std::swap(arr[i], arr[j]);
i++;
j--;
}
}
// 递归对左右两部分排序
quickSort(arr, left, j);
quickSort(arr, i, right);
}
}
int main() {
// 创建动态数组
std::vector<std::string> strArray = {"apple", "banana", "orange", "cherry", "grape"};
// 查找特定字符串
std::string searchStr = "cherry";
bool found = false;
for (const auto& s : strArray) {
if (s == searchStr) {
found = true;
break;
}
}
// 打印数组并检查是否找到
std::cout << "Unsorted array:\n";
for (const auto& s : strArray) {
std::cout << s << " ";
}
std::cout << "\n";
if (found) {
std::cout << "Found '" << searchStr << "' in the array.\n";
} else {
std::cout << "Did not find '" << searchStr << "' in the array.\n";
}
// 对数组进行快速排序
quickSort(strArray, 0, strArray.size() - 1);
std::cout << "Sorted array:\n";
for (const auto& s : strArray) {
std::cout << s << " ";
}
return 0;
}
```
**实现逻辑解释**:
1. 快速排序的核心是一个递归过程,通过选择一个基准值(pivot),将数组分为两个部分,左边的元素都小于基准,右边的元素都大于基准。
2. 主函数首先创建了一个包含字符串的动态数组`strArray`。
3. 使用一个循环遍历数组,在找到目标字符串`searchStr`时设置`found`标志为真。
4. 排序前打印原始数组,然后根据`found`标志显示结果。
5. 调用`quickSort`函数对数组进行排序,最后再次打印排序后的数组。
阅读全文