编写一个程序,从datafile.txt文件中读取所有整数,将它们按顺序存入数组,然后对这个数组进行快速排序。从控制台输入一个整数n,用二分法查找n在数组中的位置,若不存在输出not exist
时间: 2025-01-05 21:41:34 浏览: 6
要实现这个功能,你需要首先定义一个数组,然后从文本文件中读取整数并将其添加到数组中。接着使用快速排序算法对数组进行排序。最后,使用二分查找法(binary search)在已排序的数组中找到指定的数字n。下面是完整的C++代码示例:
```cpp
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
// 快速排序函数
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 partition(std::vector<int>& arr, int low, int high) {
int pivotValue = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] < pivotValue) {
i++;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return i + 1;
}
// 二分查找函数
int binarySearch(const std::vector<int>& sortedArr, int n) {
int left = 0;
int right = sortedArr.size() - 1;
while (left <= right) {
int mid = left + (right - left) / 2;
if (sortedArr[mid] == n)
return mid;
else if (sortedArr[mid] < n)
left = mid + 1;
else
right = mid - 1;
}
// 如果没有找到n,返回-1表示 "not exist"
return -1;
}
int main() {
std::ifstream inputFile("datafile.txt");
if (!inputFile.is_open()) {
std::cerr << "Could not open the file." << std::endl;
return 1;
}
std::vector<int> numbers;
int num;
while (inputFile >> num) {
numbers.push_back(num);
}
inputFile.close();
// 对数组进行排序
quickSort(numbers, 0, numbers.size() - 1);
// 用户输入n
int n;
std::cout << "Enter an integer to search: ";
std::cin >> n;
// 查找n的位置
int position = binarySearch(numbers, n);
if (position != -1)
std::cout << "Number " << n << " found at position " << position << std::endl;
else
std::cout << "Not found" << std::endl;
return 0;
}
```
阅读全文