【简单实用框架】【十大排序算法直接调用】【可移植】

news2024/10/6 1:38:25

  • ☀️博客主页:CSDN博客主页
  • 💨本文由 萌萌的小木屋 原创,首发于 CSDN💢
  • 🔥学习专栏推荐:面试汇总
  • ❗️游戏框架专栏推荐:游戏实用框架专栏
  • ⛅️点赞 👍 收藏 ⭐留言 📝,如有错误请指正
  • 📆 未来很长,值得我们全力奔赴更美好的生活✨

  • ------------------❤️分割线❤️-------------------------

请添加图片描述​​​请添加图片描述​​​请添加图片描述​​​

​​​

 Unity 小科普

老规矩,先介绍一下Unity的科普小知识:

  •  Unity 是行业领先的实时3D开发平台。
  • 包括游戏开发,电影,AR/VR,虚拟现实在内的所有创作者,可以将梦想照进现实。
  • Unity提供了一套完整完善的软件解决方案,可用于创作,运营和模拟任何2D和3D的内容,进全平台支持
  • 实际上Unity就是一个游戏引擎,大名鼎鼎的原神就是用它制作的。

MGameFrame:慢慢积累的属于自己的框架

目的:自己工作期间凭当前水准自己写的代码框架,持续更新中,方便以后自己使用,现在开源,需要自取

需求:工程中,经常会使用到排序函数,但是每次去搜索,可能最常见的就是冒泡排序,现自己总结了所有的排序,方便自己在工程中快速的使用

十大排序

冒泡,插入,归并,桶,基数,二叉树,选择,希尔,堆,快速

参考链接

参考学习

注意事项

可以直接复制源码,也可以从我的GitCode中自取

源码

using System;
using System.Collections.Generic;
public class SortTool
{
    //整体参考:https://blog.csdn.net/weixin_43199474/article/details/93067441?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782546316800215039843%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782546316800215039843&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-93067441-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8E%92%E5%BA%8F%E7%AE%97%E6%B3%95%E5%8F%8A%E5%85%B6%E5%A4%8D%E6%9D%82%E5%BA%A6&spm=1018.2226.3001.4187

    #region 冒泡排序
    /// <summary>
    /// 冒泡排序(优化版本)
    /// 时间复杂度:最差:O(n^2),最好O(n)
    /// 空间复杂度:O(1)
    /// https://blog.csdn.net/qq_48718409/article/details/120866840?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782824716800222841549%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782824716800222841549&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120866840-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E5%AE%9E%E7%8E%B0&spm=1018.2226.3001.4187
    /// </summary>
    /// <param name="list"></param>
    public static void BubbleSort(List<int> list)
    {
        bool flag = false;
        for (int i = 0; i < list.Count - 1; i++)
        {
            flag = false;
            for (int j = 0; j < list.Count - 1 - i; j++)
            {
                if (list[j] > list[j + 1])
                {
                    int temp = list[j];
                    list[j] = list[j + 1];
                    list[j + 1] = list[j];
                    flag = true;
                }
            }
            if (flag == false)
            {
                break;
            }
        }
    }
    #endregion

    #region 插入排序
    /// <summary>
    /// 插入排序
    /// 时间复杂度:最差:O(n^2),最好O(n)
    /// 空间复杂度:O(1)
    /// https://blog.csdn.net/qq_48718409/article/details/120866840?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167782824716800222841549%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167782824716800222841549&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-1-120866840-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=%E6%8F%92%E5%85%A5%E6%8E%92%E5%BA%8F%E5%AE%9E%E7%8E%B0&spm=1018.2226.3001.4187
    /// </summary>
    /// <param name="list"></param>
    public static void InsertSort(List<int> list)
    {
        for (int i = 1; i < list.Count; i++)
        { //控制循环轮数
            int temp = list[i]; //定义待交换元素
            int j; //定义待插入的位置
            for (j = i; j > 0 && temp < list[j - 1]; j--)
            {
                list[j] = list[j - 1];
            }
            list[j] = temp;
        }
    }
    #endregion 

    #region 归并排序
    /// <summary>
    /// 归并排序
    /// 时间复杂度:O(nlog(n))
    /// 空间复杂度:O(n)</summary>
    /// https://www.cnblogs.com/chengxiao/p/6194356.html
    /// <param name="list"></param>
    public static void MergerSort(List<int> list)
    {
        int[] temp = new int[list.Count];//在排序前,先建好一个长度等于原数组长度的临时数组,避免递归中频繁开辟空间
        sort(list, 0, list.Count - 1, temp);
    }

    private static void sort(List<int> list, int left, int right, int[] temp)
    {
        if (left < right)
        {
            int mid = (left + right) / 2;
            sort(list, left, mid, temp);//左边归并排序,使得左子序列有序
            sort(list, mid + 1, right, temp);//右边归并排序,使得右子序列有序
            merge(list, left, mid, right, temp);//将两个有序子数组合并操作
        }
    }

    private static void merge(List<int> list, int left, int mid, int right, int[] temp)
    {
        int i = left;//左序列指针
        int j = mid + 1;//右序列指针
        int t = 0;//临时数组指针
        while (i <= mid && j <= right)
        {
            if (list[i] <= list[j])
            {
                temp[t++] = list[i++];
            }
            else
            {
                temp[t++] = list[j++];
            }
        }
        while (i <= mid)
        {//将左边剩余元素填充进temp中
            temp[t++] = list[i++];
        }
        while (j <= right)
        {//将右序列剩余元素填充进temp中
            temp[t++] = list[j++];
        }
        t = 0;
        //将temp中的元素全部拷贝到原数组中
        while (left <= right)
        {
            list[left++] = temp[t++];
        }
    }
    #endregion

    #region 桶排序
    /// <summary>
    /// 归并排序
    /// 时间复杂度:O(N+M),近似O(N)
    /// 空间复杂度:O(N+M)
    /// https://www.cnblogs.com/skywang12345/p/3602737.html
    /// </summary>
    /// <param name="list"></param>
    public static void BucketSort(List<int> list, int maxVal)
    {
        int[] buckets;

        if (list == null || maxVal < 1)
            return;

        // 创建一个容量为max的数组buckets,并且将buckets中的所有数据都初始化为0。
        buckets = new int[maxVal];

        // 1. 计数
        for (int i = 0; i < list.Count; i++)
            buckets[list[i]]++;

        // 2. 排序
        for (int i = 0, j = 0; i < maxVal; i++)
        {
            while ((buckets[i]--) > 0)
            {
                list[j++] = i;
            }
        }

        buckets = null;
    }
    #endregion

    #region 基数排序
    /// <summary>
    /// 基数排序
    /// 时间复杂度:O( k*n ) ;其中k为常数,n为元素个数;
    /// 空间复杂度:(10 × length)= O (length)
    /// https://www.cnblogs.com/skywang12345/p/3603669.html
    /// </summary>
    /// <param name="list"></param>
    public static void RadixSort(List<int> list)
    {
        int exp;    // 指数。当对数组按各位进行排序时,exp=1;按十位进行排序时,exp=10;...
        int max = getMax(list);    // 数组a中的最大值

        // 从个位开始,对数组a按"指数"进行排序
        for (exp = 1; max / exp > 0; exp *= 10)
            countSort(list, exp);
    }

    /// <summary>
    /// 获取数组a中最大值
    /// </summary>
    /// <param name="list"></param>
    /// <returns></returns>
    private static int getMax(List<int> list)
    {
        int mlistx;

        mlistx = list[0];
        for (int i = 1; i < list.Count; i++)
            if (list[i] > mlistx)
                mlistx = list[i];
        return mlistx;
    }

    /*
     * 对数组按照"某个位数"进行排序(桶排序)
     *
     * 参数说明:
     *     a -- 数组
     *     exp -- 指数。对数组a按照该指数进行排序。
     *
     * 例如,对于数组a={50, 3, 542, 745, 2014, 154, 63, 616};
     *    (01) 当exp=1表示按照"个位"对数组a进行排序
     *    (02) 当exp=10表示按照"十位"对数组a进行排序
     *    (03) 当exp=100表示按照"百位"对数组a进行排序
     *    ...
     */
    private static void countSort(List<int> list, int exp)
    {
        //int output[list.length];    // 存储"被排序数据"的临时数组
        int[] output = new int[list.Count];    // 存储"被排序数据"的临时数组
        int[] buckets = new int[10];

        // 将数据出现的次数存储在buckets[]中
        for (int i = 0; i < list.Count; i++)
            buckets[(list[i] / exp) % 10]++;

        // 更改buckets[i]。目的是让更改后的buckets[i]的值,是该数据在output[]中的位置。
        for (int i = 1; i < 10; i++)
            buckets[i] += buckets[i - 1];

        // 将数据存储到临时数组output[]中
        for (int i = list.Count - 1; i >= 0; i--)
        {
            output[buckets[(list[i] / exp) % 10] - 1] = list[i];
            buckets[(list[i] / exp) % 10]--;
        }

        // 将排序好的数据赋值给list[]
        for (int i = 0; i < list.Count; i++)
            list[i] = output[i];

        output = null;
        buckets = null;
    }
    #endregion

    #region 二叉树排序
    //待更新
    #endregion

    #region 选择排序
    /// <summary>
    /// 选择排序
    /// 时间复杂度:O(N^2)
    /// 空间复杂度:O(N^2)
    /// https://blog.csdn.net/zhuo_wp/article/details/78223481?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167783001016800213086400%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167783001016800213086400&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-78223481-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=C%23%20%E9%80%89%E6%8B%A9%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187
    /// </summary>
    /// <param name="list"></param>
    public static void SelectionSort(int[] array)
    {
        for (int i = 0; i < array.Length - 1; i++)
        {
            int minValueIndex = i;
            for (int j = i + 1; j < array.Length; j++)
            {
                if (array[minValueIndex] > array[j])
                {
                    minValueIndex = j;
                }
            }

            if (minValueIndex != i)
            {
                Exchange(ref array[i], ref array[minValueIndex]);
            }
        }
    }
    private static void Exchange(ref int x, ref int y)
    {
        int temp = x;
        x = y;
        y = temp;
    }

    private static void Exchange<T>(ref T x, ref T y)
    {
        T temp = x;
        x = y;
        y = temp;
    }
    #endregion

    #region 希尔排序
    /// <summary>
    /// 希尔排序(移动法):先选择区间在用插入排序
    /// 时间复杂度:O(N^2)
    /// 空间复杂度:O(N^2)
    /// https://www.cnblogs.com/chengxiao/p/6104371.html
    /// </summary>
    /// <param name="list"></param>
    public static void XierSortForMove(List<int> list)
    {
        //增量gap,并逐步缩小增量
        for (int gap = list.Count / 2; gap > 0; gap /= 2)
        {
            //从第gap个元素,逐个对其所在组进行直接插入排序操作
            for (int i = gap; i < list.Count; i++)
            {
                int j = i;
                int temp = list[j];
                if (list[j] < list[j - gap])
                {
                    while (j - gap >= 0 && temp < list[j - gap])
                    {
                        //移动法
                        list[j] = list[j - gap];
                        j -= gap;
                    }
                    list[j] = temp;
                }
            }
        }
    }

    private static void XierSwap(List<int> list, int a, int b)
    {
        list[a] = list[a] + list[b];
        list[b] = list[a] - list[b];
        list[a] = list[a] - list[b];
    }

    /// <summary>
    /// 希尔排序(交换法):先选择区间在用插入排序
    /// 时间复杂度:O(N^2)
    /// 空间复杂度:
    /// https://www.cnblogs.com/chengxiao/p/6104371.html
    /// </summary>
    /// <param name="list"></param>
    public static void XierSortForSwap(List<int> list)
    {
        //增量gap,并逐步缩小增量
        for (int gap = list.Count / 2; gap > 0; gap /= 2)
        {
            //从第gap个元素,逐个对其所在组进行直接插入排序操作
            for (int i = gap; i < list.Count; i++)
            {
                int j = i;
                while (j - gap >= 0 && list[j] < list[j - gap])
                {
                    //插入排序采用交换法
                    XierSwap(list, j, j - gap);
                    j -= gap;
                }
            }
        }
    }
    #endregion

    #region 堆排序
    /// <summary>
    /// 堆排序
    /// 时间复杂度:O(nlogn)
    /// 空间复杂度:O(1)
    /// https://blog.csdn.net/qq_35552025/article/details/77995524?ops_request_misc=&request_id=&biz_id=102&utm_term=%E5%A0%86%E6%8E%92%E5%BA%8F%20C&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-77995524.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&spm=1018.2226.3001.4187#%E5%AE%9E%E7%8E%B0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduweb~default-1-77995524.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt
    /// </summary>
    /// <param name="list"></param>
    public static void HeapSort(List<int> list)
    {
        //将最大的值推到堆顶
        //x根据最后一个子节点的位置计算出父节点
        int x = Convert.ToInt32(Math.Floor(Convert.ToDouble((list.Count - 2) / 2)));
        for (int i = x; i >= 0; i--)
        {
            //如果子元素只存在左子元素是 让右子元素等于左子元素
            while (list[i] < list[i * 2 + 1] || list[i] < list[(i * 2 + 2) > (list.Count - 1) ? (i * 2 + 1) : i * 2 + 2])
            {
                if (list[i * 2 + 1] >= list[(i * 2 + 2) > (list.Count - 1) ? (i * 2 + 1) : i * 2 + 2])
                {
                    int index = list[i];
                    list[i] = list[i * 2 + 1];
                    list[i * 2 + 1] = index;

                }
                else
                {
                    int index = list[i];
                    list[i] = list[i * 2 + 2];
                    list[i * 2 + 2] = index;

                }

            }
        }
        //输出堆顶最大的元素
        int max = list[0];
        list[0] = list[list.Count - 1];
        Console.Write("{0}\t", max);
        //将数组中的最后一个元素删除
        List<int> num = new List<int>(list.Count - 1);
        for (int j = 0; j < list.Count - 1; j++)
        {
            num[j] = list[j];
        }
        Adjust(num);
    }

    public static void Adjust(List<int> list)
    {
        if (list.Count > 1)
        {
            HeapSort(list);
        }
    }
    #endregion

    #region 快速排序
    /// <summary>
    /// 快速排序
    /// 时间复杂度:O(nlogn)
    /// 空间复杂度:O(1)
    /// https://blog.csdn.net/enternalstar/article/details/106932822?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167783146916800188592132%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257D&request_id=167783146916800188592132&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~sobaiduend~default-2-106932822-null-null.142^v73^insert_down2,201^v4^add_ask,239^v2^insert_chatgpt&utm_term=C%23%20%E5%BF%AB%E9%80%9F%E6%8E%92%E5%BA%8F&spm=1018.2226.3001.4187
    /// </summary>
    /// <param name="list"></param>
    public void QuickSort(List<int> list, int lo, int hi)
    {
        if (lo > hi)//递归退出条件
        {
            return;
        }
        int i = lo;
        int j = hi;
        int temp = list[i];//取得基准数,空出一个位置
        while (i < j)//当i=j时推出,表示temp左边的数都比temp小,右边的数都比temp大
        {
            while (i < j && temp <= list[j])//从后往前找比temp小的数,将比temp小的数往前移
            {
                j--;
            }
            list[i] = list[j];//将比基准数小的数放在空出的位置,j的位置又空了出来
            while (i < j && temp >= list[i])//从前往后找比temp大的数,将比temp大的数往后移
            {
                i++;
            }
            list[j] = list[i];//将比基准数大的数放在hi空出来的位置,如此,i所在的位置又空了出来
        }
        list[i] = temp;
        QuickSort(list, lo, i - 1);//对lo到i-1之间的数再使用快速排序,每次快速排序的结果是找到了基准数应该在的位置
                                //其左边的数都<=它,右边的数都>=它,它此时在数组中的位置就是排序好时其应该在的位置。
        QuickSort(list, i + 1, hi);//对i+1到hi之间的数再使用快速排序
    }
    #endregion
}

GitCode地址

有用点个Fork啊

更新记录

2023-5-30 更新了九个排序静态算法

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/589355.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JeecgBoot企业级开发中实现自定义导出EXCEL的前端表格字段功能

文章目录 如何在后端实现导出前端列表字段到Excel功能需求前端的实现1. 提供一个导出的点击函数2.引入组件中的userMethod3.tableProps中导出中添加对应的查询参数4. 编写导出函数 后端逻辑的实现1.Controller层2.创建Modal类3.Sevice层 检验成果总结 如何在后端实现导出前端列…

【Android Gradle 插件】更新依赖方式,同时解决github三方库引用无法使用问题

首先看一下完整的 settings.gradle 依赖介绍 /* pluginManagement 脚本块,用于配置Gradle插件的Maven仓库,配置的是构建过程中,使用的仓库 ; pluginManagement 脚本块中的 repositories 配置 , 对应之前的 buildscript 中的 repositories 配置 ; */ pluginManagement {reposit…

技术分享 | 一文了解 MySQL Optimizer Trace 的神奇功效

作者&#xff1a;Mutlis CSDN & 阿里云 & 知乎 等平台优质作者&#xff0c;擅长Oracle & MySQL等主流数据库系统的维护和管理等 本文来源&#xff1a;原创投稿 前言 对于 MySQL 5.6 以及之前的版本来说&#xff0c;查询优化器就像是一个黑盒子一样&#xff0c;…

迪赛智慧数——柱状图(基本柱状图):购买雪糕考虑的因素

效果图 冰淇淋季节来袭&#xff0c;因其细腻凉爽的口感和浓郁的口味被广大消费者所钟爱&#xff0c;近年来已经从一款传统的解暑冷冻饮品转变为一种原料丰富、口味多元、追求健康、愉悦和高品质生活方式的休闲食品。据数据显示&#xff0c;82.2&#xff05;女性、82.3%男性消费…

chatgpt赋能python:Python中乘方的介绍

Python中乘方的介绍 在Python中&#xff0c;乘方运算指数运算&#xff0c;常用符号为“”&#xff08;例如2的3次方为23&#xff09;。使用乘方运算可以快速地进行数值计算&#xff0c;尤其是在科学和工程领域中。 为什么要使用乘方运算&#xff1f; 乘方运算主要用于处理大…

NeRF算法

Instant-ngp Instant-ngp简单介绍 Instant-ngp论文链接 英伟达实现的github链接 taichi实现Instant-ngp taichi实现的github链接 渲染 采用体素渲染方法&#xff0c;从相机光线出发&#xff0c;逐步采样3D场景中的三维坐标点的颜色&#xff0c;即可渲染出3D画面。如果直接将3…

进阶神册,Redis+Nginx+设计模式+Spring全家桶+Dubbo核心技术笔记

最近花了很长的时间去搜罗Java核心技术好文&#xff0c;我把每个Java核心技术的优选文章都整理成了一个又一个的文档。昨天也是终于全部整理好了&#xff0c;今天就把这些东西分享给老铁们&#xff0c;也能为老铁们省去不少麻烦&#xff0c;想学什么技能了&#xff0c;遇到哪方…

vue3组件通信详解

vue3组件通信方式有以下几种&#xff1a;porps&#xff0c;$emit&#xff0c; bus&#xff0c;v-model&#xff0c;useAttrs&#xff0c;$ref/$parent&#xff0c;provide/inject&#xff0c;pinia&#xff0c;slot。下面将逐一讲解。 目录 1.porps&#xff1a;实现父子组件通…

V7.0_增加消息队列功能

一&#xff0c;功能描述 增加消息队列&#xff1b;使用自定义copy功能时&#xff0c;子进程copy结束后向父进程发送消息&#xff08;通过消息队列&#xff09;然后exit&#xff1b;此时因wait&#xff08;&#xff09;而处于阻塞态的父进程终于解除了阻塞并且从队列中读取到消…

【云原生-K8s-1】kubeadm搭建k8s集群(一主两从)完整教程及kubernetes简介

&#x1f341;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; 文章目录 Kubernetes简介1 kubernetes架构1.1m…

清凉一夏小风扇-React版

这里写目录标题 前言 一、效果二、代码分享三、总结 前言 本片文章主要是做一个小练习&#xff0c;通过react来制作一个风扇练习css动画。 vue3实现部分看这里–> 一、效果 二、代码分享 1、主体框架 “react”: “^18.2.0” “sass”: “^1.62.1” 2、主要技术点 使用事…

企业上云容灾如何实现碳中和?

随着能源成本的增加和数据消费的激增&#xff0c;“电耗”和“碳排放”成为今年世界移动通信大会热议的话题。目前&#xff0c;ICT行业耗电量约占全球用电量的7%。预计到2040年&#xff0c;ICT行业碳排放量占全球排放量的比例将上升至14%。 容灾是企业为了在灾难时保证业务继续…

基于html+css的图展示99

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

Log4j2 - JNDI 注入漏洞复现(CVE-2021-44228)

文章目录 Apache Log4j简介漏洞介绍影响版本漏洞编号影响组件应用 环境准备靶场搭建漏洞利用利用工具使用方式 反弹shell操作 漏洞修复建议 Apache Log4j简介 Apache log4j 是 Apache 的一个开源项目&#xff0c; Apache log4j2 是一个 Java 的日志记录工具。该工具重写了 log4…

03.hadoop上课笔记之hdfs环境的搭建和使用

1.启动网络 在windows任务管理器启动服务vm Dhcp #由动态ip变为静态 #启动网卡ifup ens33#修改网卡配置文件vi /etc/sysconfig/network-scripts/ifcfg-ens33BOOTSTRAPstaticIPADDR192.168.202.101NETMASK255.255.255.0GATEWAY192.168.202.2DNS1192.168.202.2#重启网络 servic…

Vue动态路由在实际项目中的应用(包含前后台细节)

背景 近期做一个公司的门户网站&#xff0c;在产品和新闻这一块需要用到动态路由。本节博客以产品板块为例说一下动态路由的应用。 另外如果路由相关的基础知识有问题&#xff0c;可以查看我的这篇博客&#xff1a; Vue2路由的详细讲解 另外&#xff0c;这篇博客也会涉及到一…

macOS visual studio code 没有读写权限 检查更新报错

问题描述 visual studio code 检查更新&#xff0c;报错&#xff0c;visual studio code没有磁盘读写权限。&#xff08;可能会导致插件安装报错&#xff1f;&#xff09; 报错&#xff1a;The application is on a read-only volume. Please move the application and try a…

网络安全人员需要考的几本(含金量高)的证书!

网络安全行业含金量最高的当属CISSP——注册信息系统安全专家。但这个认证也是大家公认比较难考的证书. 含金量次之的CISP——国家注册信息安全专业人员&#xff0c;包含CISE&#xff08;工程师&#xff09;、CISO&#xff08;管理&#xff09;、CISA&#xff08;外审&#xf…

面试前15天刷完这个笔记,拿下字节测开岗offer....

面试&#xff0c;跳槽&#xff0c;每天都在发生&#xff0c;跳槽&#xff0c;更是很常见的&#xff0c;对于每个人来说&#xff0c;跳槽的意义也各不相同&#xff0c;可能是一个人更向往一个更大的平台&#xff0c;更好的地方&#xff0c;可以通过换一个环境改变自己的现状。而…

基于OpenCV [c++]——形态学操作(分析和应用)

摘要&#xff1a; 形态学一般指生物学中研究动物和植物结构的一个分支。用数学形态学&#xff08;也称图像代数&#xff09;表示以形态为基础对图像进行分析的数学工具。 基本思想是用具有一定形态的结构元素去度量和提取图像中的对应形状以达到对图像分析和识别的目的。 形…