用C++写一个类似sort的算法
时间: 2023-03-13 07:12:11 浏览: 49
我可以给你简单介绍一下C语言中实现排序算法的基本步骤:1. 首先,从待排序的数组中选择一个元素(通常称为基准元素)。2. 接下来,把所有比基准元素小的元素放到它的左边,把所有比基准元素大的元素放到它的右边。3. 重复步骤2,直到把数组分成两个部分,然后把这两个部分分别排序,最后把排序后的两个部分合并起来。
相关问题
用C++写一个桶排序算法
好的,以下是用C++实现的桶排序算法:
```c++
#include <iostream>
#include <vector>
using namespace std;
void bucketSort(vector<int>& nums, int max_val) {
vector<int> bucket(max_val + 1, 0);
for (int num : nums) {
bucket[num]++;
}
int i = 0;
for (int j = 0; j <= max_val; j++) {
while (bucket[j] > 0) {
nums[i++] = j;
bucket[j]--;
}
}
}
int main() {
vector<int> nums = {3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5};
int max_val = 9;
bucketSort(nums, max_val);
for (int num : nums) {
cout << num << " ";
}
cout << endl;
return 0;
}
```
这里用了一个辅助数组`bucket`来记录每个元素出现的次数。首先遍历原始数组,统计每个元素的出现次数,然后再根据桶的顺序依次将元素放回原始数组中。时间复杂度为O(n+k),其中k是桶的个数,最坏情况下k=n,所以时间复杂度为O(n^2)。
用c++写一个中值滤波算法
中值滤波算法是一种常见的图像处理算法,可以有效地减少图像中的噪声。下面是一个用 C++ 实现的简单中值滤波算法:
```c++
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 中值滤波算法
void median_filter(vector<int>& image, int width, int height, int kernel_size) {
int kernel_radius = kernel_size / 2;
// 遍历图像像素
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
// 获取当前像素的领域像素
vector<int> kernel;
for (int j = -kernel_radius; j <= kernel_radius; ++j) {
for (int i = -kernel_radius; i <= kernel_radius; ++i) {
int px = x + i;
int py = y + j;
if (px >= 0 && px < width && py >= 0 && py < height) {
kernel.push_back(image[py * width + px]);
}
}
}
// 对领域像素进行排序,计算中值
sort(kernel.begin(), kernel.end());
int median = kernel[kernel_size / 2];
// 将中值赋值给当前像素
image[y * width + x] = median;
}
}
}
int main() {
int width = 10;
int height = 10;
int kernel_size = 3;
// 随机生成图像
vector<int> image(width * height);
for (int i = 0; i < width * height; ++i) {
image[i] = rand() % 256;
}
// 输出原始图像
cout << "Original Image:" << endl;
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
cout << image[y * width + x] << " ";
}
cout << endl;
}
// 中值滤波
median_filter(image, width, height, kernel_size);
// 输出处理后的图像
cout << "Filtered Image:" << endl;
for (int y = 0; y < height; ++y) {
for (int x = 0; x < width; ++x) {
cout << image[y * width + x] << " ";
}
cout << endl;
}
return 0;
}
```
这个实现中,我们使用了一个二维向量 `image` 存储图像像素值,使用 `median_filter` 函数进行中值滤波。在函数中,我们遍历每个像素,获取其周围 `kernel_size` × `kernel_size` 个像素值,然后对这些像素值进行排序,取其中位数作为该像素的新值。最后输出处理后的图像。