当前位置: 首页 > news >正文

通过C或C++编程语言实现某一个或多个具体算法

1. 排序算法(例如快速排序)

快速排序是一个常见的排序算法,其平均时间复杂度为 O(n log n)。

快速排序的 C++ 实现:

cpp
#include <iostream>
using namespace std;

// 快速排序算法
void quickSort(int arr[], int low, int high) {
    if (low < high) {
        int pivot = arr[high];  // 选择最后一个元素作为 pivot
        int i = low - 1;  // i 是分区的边界
        
        for (int j = low; j < high; j++) {
            if (arr[j] < pivot) {  // 如果当前元素小于 pivot
                i++;
                swap(arr[i], arr[j]);
            }
        }
        swap(arr[i + 1], arr[high]);  // 将 pivot 放到正确的位置
        int pi = i + 1;  // pivot 的位置
        
        // 递归调用快速排序,分别对左半部分和右半部分进行排序
        quickSort(arr, low, pi - 1);
        quickSort(arr, pi + 1, high);
    }
}

int main() {
    int arr[] = {10, 80, 30, 90, 40, 50, 70};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    cout << "原始数组: ";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    
    quickSort(arr, 0, n - 1);
    
    cout << "排序后的数组: ";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;

    return 0;
}

2. 二分查找算法

二分查找是一个效率较高的查找算法,其时间复杂度为 O(log n),适用于已排序数组。

二分查找的 C++ 实现:

cpp
#include <iostream>
using namespace std;

// 二分查找
int binarySearch(int arr[], int n, int target) {
    int left = 0, right = n - 1;
    
    while (left <= right) {
        int mid = left + (right - left) / 2;  // 计算中间位置
        
        // 如果目标值等于中间元素,返回其位置
        if (arr[mid] == target)
            return mid;
        
        // 如果目标值小于中间元素,忽略右半部分
        if (arr[mid] > target)
            right = mid - 1;
        // 如果目标值大于中间元素,忽略左半部分
        else
            left = mid + 1;
    }
    
    return -1;  // 如果没找到目标值,返回 -1
}

int main() {
    int arr[] = {1, 3, 5, 7, 9, 11, 13, 15};
    int n = sizeof(arr) / sizeof(arr[0]);
    int target = 7;
    
    int result = binarySearch(arr, n, target);
    
    if (result != -1)
        cout << "元素 " << target << " 在索引 " << result << " 处找到" << endl;
    else
        cout << "元素 " << target << " 未找到" << endl;

    return 0;
}

3. 最大子数组和(动态规划)

最大子数组和是经典的动态规划问题,通常使用 Kadane 算法解决。

最大子数组和的 C++ 实现:

cpp
#include <iostream>
#include <climits>
using namespace std;

// 动态规划求最大子数组和
int maxSubArraySum(int arr[], int n) {
    int max_so_far = INT_MIN;
    int max_ending_here = 0;
    
    for (int i = 0; i < n; i++) {
        max_ending_here += arr[i];
        
        if (max_so_far < max_ending_here)
            max_so_far = max_ending_here;
        
        if (max_ending_here < 0)
            max_ending_here = 0;
    }
    
    return max_so_far;
}

int main() {
    int arr[] = {-2, 1, -3, 4, -1, 2, 1, -5, 4};
    int n = sizeof(arr) / sizeof(arr[0]);
    
    cout << "最大子数组和是: " << maxSubArraySum(arr, n) << endl;

    return 0;
}

4. 深度优先搜索(DFS)

深度优先搜索是图遍历中的一种算法,适用于图的遍历和搜索问题。

深度优先搜索(DFS)的 C++ 实现:

cpp
#include <iostream>
#include <vector>
#include <stack>
using namespace std;

void DFS(int start, vector<vector<int>>& adjList, vector<bool>& visited) {
    stack<int> s;
    s.push(start);
    visited[start] = true;
    
    while (!s.empty()) {
        int node = s.top();
        s.pop();
        cout << node << " ";
        
        for (int neighbor : adjList[node]) {
            if (!visited[neighbor]) {
                s.push(neighbor);
                visited[neighbor] = true;
            }
        }
    }
}

int main() {
    int n = 5;  // 图的节点数
    vector<vector<int>> adjList(n);
    
    // 构造无向图的邻接表
    adjList[0] = {1, 2};
    adjList[1] = {0, 3};
    adjList[2] = {0, 4};
    adjList[3] = {1};
    adjList[4] = {2};
    
    vector<bool> visited(n, false);
    
    cout << "深度优先搜索结果: ";
    DFS(0, adjList, visited);
    cout << endl;

    return 0;
}

相关文章:

  • AI大模型(DeepSeek)科研应用、论文写作、数据分析与AI绘图学习
  • Winform禁止高分辨下缩放布局成功方法
  • 08模拟法 + 技巧 + 数学 + 缓存(D2_技巧)
  • 运用Deek Seeker协助数据分析
  • GitCode 助力 Dora SSR:开启游戏开发新征程
  • 对PosWiseFFN的改进: MoE、PKM、UltraMem
  • RocketMQ与kafka如何解决消息积压问题?
  • 网络性能测试工具ipref
  • 深入探索现代CSS:从基础到未来趋势
  • 防火墙是什么?详解网络安全的关键守护者
  • 【Abnormal build process termination: xxx, Unrecognized option: --add-opens】
  • 【SVN基础】
  • 使用 Flask 构建流式返回服务
  • 处理项目中存在多个版本的jsqlparser依赖
  • http 与 https 的区别?
  • 网络安全要学python 、爬虫吗
  • 浅谈无人机群技术的作战应用与战略意义
  • w206基于Spring Boot的农商对接系统的设计与实现
  • 无人机遥感在农林信息提取中的实现方法与GIS融合应用
  • 第三章:Matlab 绘图功能
  • 做一家算命的网站/培训机构优化
  • 网页构建器/长沙seo结算
  • 网站建设和使用情况/上海关键词排名优化公司
  • 网站建设kaodezhu/百度推广有效果吗?
  • 酒类网站建设/lol关键词查询
  • 个人做网站可以吗/深圳关键词自动排名