给定n个数值,从小到大排序。 要求: 1. 输入随机生成0≦x≦109数组,长度分别为5、10、100; 2. 采用三种排序(快速排序、归并排序、自选一类排序算法)输出每次执行的排序结果 使用c++
时间: 2024-10-20 11:17:27 浏览: 33
leetcode169-leetcode169:多数元素...给定大小为n的数组nums,返回多数元素。多数元素是出现超过⌊n/2⌋次的元素。
在C++中,我们可以分别使用快速排序、归并排序和自定义的选择排序算法来处理这个问题。以下是每个排序算法的示例实现:
1. **快速排序(Quick Sort)**:
```cpp
#include <iostream>
#include <cstdlib> // 需要rand和srand
void quickSort(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);
}
}
// Partition function for QuickSort
int partition(int arr[], int low, int high) {
int pivot = arr[high];
int i = low - 1;
for (int j = low; j <= high - 1; j++) {
if (arr[j] <= pivot) {
i++;
std::swap(arr[i], arr[j]);
}
}
std::swap(arr[i + 1], arr[high]);
return i + 1;
}
int main() {
int n = 100; // 或者 5, 10
int* arr = new int[n]; // 生成随机数组
srand(time(0));
for (int i = 0; i < n; ++i)
arr[i] = rand() % 1e9;
quickSort(arr, 0, n - 1);
// 输出排序后的数组
for (int i = 0; i < n; ++i)
std::cout << arr[i] << " ";
std::cout << "\n";
delete[] arr; // 释放内存
return 0;
}
```
2. **归并排序(Merge Sort)**:
```cpp
#include <vector>
std::vector<int> merge(std::vector<int>& nums1, std::vector<int>& nums2) {
int m = nums1.size();
int n = nums2.size();
std::vector<int> result(m + n);
int i = 0, j = 0, k = 0;
while (i < m && j < n) {
if (nums1[i] <= nums2[j]) {
result[k++] = nums1[i++];
} else {
result[k++] = nums2[j++];
}
}
while (i < m) {
result[k++] = nums1[i++];
}
while (j < n) {
result[k++] = nums2[j++];
}
return result;
}
void mergeSort(std::vector<int>& nums, int left, int right) {
if (left < right) {
int mid = left + (right - left) / 2;
mergeSort(nums, left, mid);
mergeSort(nums, mid + 1, right);
nums = merge(nums, nums);
}
}
int main() {
int n = 100;
std::vector<int> arr(n);
// ... (同上生成随机数组)
mergeSort(arr, 0, n - 1);
// 输出排序后的数组
for (int i : arr)
std::cout << i << " ";
std::cout << "\n";
return 0;
}
```
3. **自适应选择排序(Adaptive Selection Sort)**:
```cpp
#include <vector>
void selectionSort(std::vector<int>& arr, int n) {
for (int i = 0; i < n - 1; ++i) {
int min_idx = i;
for (int j = i + 1; j < n; ++j) {
if (arr[j] < arr[min_idx])
min_idx = j;
}
std::swap(arr[i], arr[min_idx]);
}
}
int main() {
int n = 100;
std::vector<int> arr(n);
// ... (同上生成随机数组)
selectionSort(arr, n);
// 输出排序后的数组
for (int i : arr)
std::cout << i << " ";
std::cout << "\n";
return 0;
}
```
阅读全文