首页 > 编程语言 >C++版数据结构与算法

C++版数据结构与算法

时间:2024-03-21 20:25:17浏览次数:22  
标签:index 排序 min int length C++ 算法 数据结构

    大家好,今天开始给大家每天带来C++版的数据结构与算法,后面也会包括C#的系统学习。

   这段代码是一个C++实现的排序算法集合。其中包括选择排序(selection sort)、冒泡排序(bubble sort)、插入排序(insertion sort)和归并排序(merge sort)。算法后越往后越难,此次做这个系列博客,是想从基础算法开始逐步上升到高阶算法。

   为了让大家更好的理解算法的执行过程,给大家安利一个网站(visualgo),https://visualgo.net/en,这个网站时免费的,有不懂的地方可以去上面看算法的执行过程。如果大家还是有不懂的地方,可以评论和私信我,我会尽我所能帮助大家把算法搞懂。
#include<iostream>
using namespace std;
int a[111000];
/*
	交换数组a中下标为firstIndex和secondIndex位置的元素
*/
void swap(int a[], int firstIndex, int secondIndex) {
    int i = a[firstIndex];
    a[firstIndex] = a[secondIndex];
    a[secondIndex] = i;
}
/*
	选择排序:
	每次从未排序的部分选择一个最小的元素,放到已排序部分的末尾。
*/
void selectionSort(int a[], int length) {
    for (int i = 0; i < length - 1; i++) {
        int min_index = i;
        for (int j = i + 1; j < length; j++) {
            if (a[j] < a[min_index]) {
                min_index = j;
            }
        }
        swap(a, i, min_index);
    }
}
/*
	冒泡排序:
    依次比较相邻的两个元素,将较大的元素逐渐交换到后面,每次外层循环完成时将剩下的元素中最大的元素归位。
*/
void bubbleSort(int a[], int length) {
    for (int i = 0; i < length; i++) {
        for (int j = length - 1; j > 0; j--) {
            if (a[j] < a[j - 1]) {
                swap(a, j, j - 1);
            }
        }
    }
}
/*
	插入排序:
	将未排序的元素一个一个插入到已排序的部分中,插入时比较大小并移动元素位置。
*/
void insertionSort(int a[], int length) {
    for (int i = 0; i < length; i++) {
        int min_index = i;
        for (int j = i; j < length; j++) {
            min_index = a[j] < a[min_index] ? j : min_index;
        }
        swap(a, i, min_index);
    }
}
/*
	归并排序:
	将数组分为两部分,分别排序后再合并。合并时依次比较两个子数组的元素,并将较小的元素放入临时数组中,最后将临时数组的元素复制回原数组。
*/
void merge(int a[], int l, int m, int r) {
    int len = r - l + 1;
    int help[len];
    int i = 0;
    int p1 = l;
    int p2 = m + 1;
    while (p1 <= m && p2 <= r) {
        help[i++] = a[p1] <= a[p2] ? a[p1++] : a[p2++];
    }
    while (p1 <= m) {
        help[i++] = a[p1++];
    }
    while (p2 <= r) {
        help[i++] = a[p2++];
    }
    for (i = 0; i < len; i++) {
        a[l + i] = help[i];
    }
}

void mergeSort(int a[], int l, int r) {
    if (l == r) {
        return;
    }
    int mid = l + ((r - l) >> 1);
    mergeSort(a, l, mid);
    mergeSort(a, mid + 1, r);
    merge(a, l, mid, r);

}

标签:index,排序,min,int,length,C++,算法,数据结构
From: https://www.cnblogs.com/DMQDT/p/18088164

相关文章

  • Redis第二课,1.set key value(设置对应的key和value)2.get key(得到value值)Redis全局
    Redis的启动 redis-cli目录1.setkeyvalue(设置对应的key和value)2.getkey(得到value值)Redis全局命令(支持很多的数据结构)3.keys(用来查询当前服务器匹配的key)生产环境/线上环境4.exist(判定key是否存在):判定key是否存在​编辑5.DEL  key 返回删掉的key......
  • 23种设计模式核心思想及代码实现(Java C++)
    目录代码OOP七大原则策略模式单例模式观察者模式装饰模式抽象工厂模式工厂模式简单工厂模式工厂模式抽象工厂模式三种工厂模式的区别简单工厂模式和策略模式的不同pipeline模式职责链模式代理模式静态代理动态代理......
  • 记一些java里的数据结构
    0.Vector:过期的,被arraylist取代了0.1Stack:也不建议使用1.双向链表LinkedList:由list实现的接口类2.队列Queue:操作为addremoveelement(会报异常)offerpollpeek3.双端队列Deque:就是栈+队列Deque<>deque=newLinkedList()<>;常用操作:(会返回特殊值不会报异常)......
  • 语音转文字——sherpa ncnn语音识别离线部署C++实现
    简介Sherpa是一个中文语音识别的项目,使用了PyTorch进行语音识别模型的训练,然后训练好的模型导出成torchscript格式,以便在C++环境中进行推理。尽管PyTorch在CPU和GPU上有良好的支持,但它可能对资源的要求较高,不太适合嵌入式环境或要求轻量级依赖的场景。考虑到模......
  • C++ this指针
    1. this指针的用处一个对象的this指针并不是对象本身的一部分,不会影响sizeof(对象)的结果。this作用域是在类内部,当在类的非静态成员函数中访问类的非静态成员的时候,编译器会自动将对象本身的地址作为一个隐含参数传递给函数。也就是说,即使你没有写上this指针,编译器在编译的时......
  • 复试C++16真题_程序设计1_输出句子中每个单词长度
    输入一行文本,按照相应格式输出每个单词的长度#include<iostream>usingnamespacestd;#include<string>#include<vector>#include<iomanip>intmain(){stringsen="qweasdaxszfsfsddwfas";//getline(cin,sen);如果要把输入的空格的记录......
  • 代码随想录算法训练营第五十三天 | 53. 最大子序和 动态规划,1035.不相交的线,1143.最
    53.最大子数组和 已解答中等 相关标签相关企业 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。  示例1:输入:nums=[-2,1,-3,4,-1,2,1,-5,4]......
  • C++的内存管理
    1.C/C++内存分布我们可以先来了解一下具体的内存区域分布图,通过一个代码 那么我们想为什么要划分这些区域?为了方便管理因为我们在程序中有不同类型的数据(静态,局部,全局等)比如生命周期的不同,放到不同的区域进行管理哪个是我们重点关注的?堆区。因为其他区域不用管释......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素。
    704.二分查找有顺序2.左右双指针通过中间位大小来判断指针移动难点:边界防止溢出错误:mid=left+(right-left)//2Complexity:O(log(n))classSolution:defsearch(self,nums:List[int],target:int)->int:#sortedlist#binary......
  • 解决[TSP旅行商]问题,请列出[4]个可以用[Python]编程的优化路径算法,展开写出这[4]个算
    TSP(旅行商问题)是一个经典的组合优化问题,其目标是找到访问所有城市并返回起点的最短可能路线。在Python中,有多种算法可以用来解决TSP问题,以下是四个常用的算法及其编程难度级别、时间复杂度和所需的库:回溯法(Backtracking)编程难度级别:中等时间复杂度:指数级,因为需要遍历所有......