【数据结构与算法】Java实现七大排序算法汇总

news2025/1/12 23:09:35

✨哈喽,进来的小伙伴们,你们好耶!✨

🛰️🛰️系列专栏:【数据结构与算法】

✈️✈️本篇内容:  Java实现七大排序算法汇总!

🚀🚀由于本篇博客涉及代码较多,博主把代码都提交到了码云仓库gitee:Java数据结构代码存放!

⛵⛵作者简介:一名双非本科大三在读的科班Java编程小白,道阻且长,你我同行!

🍱🍱给大家推荐一个超级好用的刷题网站—牛客网!

点击链接注册,开启刷题之路!

66bf45c8e14249a18ede2b7bab8e57b8.png

目录

一、排序的概念

二、插入排序

1、直接插入排序

2、希尔排序

 三、选择排序

1、直接选择排序

二、堆排序

四、交换排序

1、冒泡排序

2、快速排序

1、Hoare法

2、挖坑法

3、前后指针法

快速排序测试

 快速排序优化

1、三数取中法

2、子区间插入排序

六、归并排序

 1、递归实现归并排序

 2、非递归实现归并排序 

一、排序的概念

🍻🍻排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。
🍎🍎稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳 定的;否则称为不稳定的。

a73a6b156b6947108de0206d27b41a10.png

二、插入排序

🍏基本思想:

直接插入排序是一种简单的插入排序法,其基本思想是:
把待排序的记录按其关键码值的大小逐个插入到一个已经排好序的有序序列中,直到所有的记录插入完为止,得到一个新的有序序列 。

1、直接插入排序

🍯🍯直接插入排序的基本思想就是在一组给定的元素中,我们先定义一个i作为下标,我们将i下标的元素放在一个临时变量tmp中,即array[i]  = tmp;然后在定义一个变量j,j=i-1;j下标往前走,每遇到一个元素就和tmp比较,如果array[j] > tmp,那么array[j+1] = tmp;这样就把前面大的元素给放到了后面,j往前遍历的前提是j>=0;如果array[j] <= tmp;那么循环结束,这里要注意的是最后循环条件不满足时,还要执行一次array[j+1] = tmp;因为最后一次没有交换,这样我们的代码就完整了

50fac2a260cb4ae3881f810c5eefad62.gif

 🍸🍸代码实现:

    public static void insertSort(int []arr){
        for (int i = 0; i < arr.length; i++) {
            int j = i-1;
            int tmp = arr[i];
            for (; j >=0 ; j--) {
                if(arr[j] > tmp){
                    arr[j+1] = arr[j];
                }else{
                    break;
                }
            }
            arr[j+1] = tmp;
        }
    }

🍗🍗直接插入排序的特性总结:

1. 元素集合越接近有序,直接插入排序算法的时间效率越高 。
2. 时间复杂度:O(N^2) 。
3. 空间复杂度:O(1),它是一种稳定的排序算法 。
4. 稳定性:稳定 。

2、希尔排序

🍤🍤希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止。

 11ae043b91d54ad3b373ab8b9503dd2e.gif

🧀🧀希尔排序可以看成是直接插入排序的一种优化,因为在希尔排序当中,我们会确定一个步长gap,这个gap的值可以是大于1的,那么就假设我上面的动态图解中,有6个元素待排序,以间隔为4分组,那么距离第一个元素1步长为4的元素就是8,第二个元素5距离为步长4的元素就是4,那么1和8比较,1比8小,不交换,5和4比较,5比4大,交换;交换完成后在以2为步长分组,同理最后步长为1的时候,那么我们的比较就完成了,实现原理就是直接插入排序,但是希尔排序的好处就是一次排序会把大的元素尽量往后排,把小的元素往前排,这样就减少了我们直接插入排序的挨个元素比较,减少了时间复杂度。

🍬🍬代码实现:

  public static void shell(int[] array,int gap) {
        for (int i = gap; i < array.length; i++) {
            int tmp = array[i];
            int j = i-gap;
            for (; j >= 0;j-=gap) {
                if(array[j] > tmp) {
                    array[j+gap] = array[j];
                }else {
                    break;
                }
            }
            array[j+gap] = tmp;
        }
    }
    public static void shellSort(int[] array) {
        int gap = array.length;
        while (gap > 1) {
            gap /= 2;
            shell(array,gap);
        }
    }

🍫🍫1.希尔排序是对直接插入排序的优化。
2.当gap > 1时都是预排序,目的是让数组更接近于有序。当gap == 1时,数组已经接近有序的了
这样就会很快。这样整体而言,可以达到优化的效果。我们实现后可以进行性能测试的对比。

3. 希尔排序的时间复杂度不好计算,因为gap的取值方法很多,导致很难去计算,因此在好些书中给出的希尔排序的时间复杂度都不固定,如果没有特殊说明,我们通常就取时间复杂度为O(n^1.3)。

时间复杂度:O(n^1.3)

空间复杂度:O(1)

4. 稳定性:不稳定

 三、选择排序

1、直接选择排序

基本思想:

每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 。
9e880519c72c47ae9535d84fa371b993.gif

 代码实现:

 public static void selectSort(int[] array){
        int i = 0;
        int minindex = i;
        for (i = 0; i < array.length; i++) {
            for (int j = i+1; j <array.length ; j++) {
                if(array[j] < array[minindex]){
                    //更新minindex的值
                    minindex = j;
                }
            }
            //处理两个下标值一样的情况
            if (i != minindex){
                swap(array,minindex,i);
            }
        }
    }
    public static void swap(int[] array,int i,int j){
        int tmp = array[i];
        array[i] = array[j];
        array[j] =tmp;
    }
直接选择排序的特性总结
1. 直接选择排序思考非常好理解,但是效率不是很好。实际中很少使用 。
2. 时间复杂度:O(N^2) 。
3. 空间复杂度:O(1) 。
4. 稳定性:不稳定。

二、堆排序

堆排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。它是通过堆来进行选择数据。 需要注意的是排升序要建大堆,排降序建小堆。
ca6f01e9f8664f4fbf50030542fac834.gif

代码实现:

  public static void heapSort(int[] array) {//堆排序
        createBigHeap(array);//O(n)
        int end = array.length-1;
        while (end > 0) {
            swap(array,0,end);
            shiftDown(array,0,end);
            end--;
        }
    }

    private static void createBigHeap(int[] array) {//创建大根堆
        for (int parent = (array.length-1-1)/2; parent >= 0 ; parent--) {
            shiftDown(array,parent,array.length);
        }
    }

    private static void shiftDown(int[] array,int parent,int len) {//向下调整
        int child = (2 * parent) + 1;
        while (child < len) {
            if (child + 1 < len && array[child] < array[child + 1]) {
                child++;
            }
            if (array[child] > array[parent]) {
                swap(array, child, parent);
                parent = child;
                child = 2 * parent + 1;
            } else {
                break;
            }
        }
    }

【堆排序特性总结】

1. 堆排序使用堆来选数,效率就高了很多。
2. 时间复杂度:O(N*logN) 。
3. 空间复杂度:O(1) 。
4. 稳定性:不稳定 。

四、交换排序

基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。

1、冒泡排序

冒泡排序基本思想就是相邻元素挨个比较,遇到比自己小的就交换,直到最后元素有序。

461259016828485d8a76970a32d293d7.gif

代码实现:

    public static void bubbleSort(int[] array) {
        //最外层控制的是趟数
        for (int i = 0; i < array.length-1; i++) {
            boolean flg = false;
            for (int j = 0; j < array.length-1-i; j++) {
                if(array[j] > array[j+1]) {
                    swap(array,j,j+1);
                    flg = true;
                }
            }
            if(flg == false) {
                break;
            }
        }
    }
冒泡排序的特性总结
1. 冒泡排序是一种非常容易理解的排序
2. 时间复杂度:O(N^2)
3. 空间复杂度:O(1)
4. 稳定性:稳定

2、快速排序

快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元 素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有 元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。
10e93a8898b54b7c88de1d76e29ecb50.gif

1、Hoare法

Hoare法的基本思想就是假设我们选array[0],作为我们的临时节点tmp,定义两个指针变量left和right,先让right从右往左走,找到第一个小于tmp的元素下标,然后left从前往后遍历,找到第一个大于tmp元素的下标,然后交换这两个下标元素的值,当循环结束后,把我们的tmp和left下标交换,那么得到的结果就是tmp左边元素都比tmp小,tmp右边的元素都比tmp大。

代码实现:

 private static int partitionHoare(int[] array,int left,int right) {//hoare法
        int i = left;
        int pivot = array[left];
        while (left < right) {
            //left < right &&  这个条件不能少 预防后面都比基准大
            while (left < right && array[right] >= pivot) {
                right--;
            }
            //代码走到这里表示right下标的值 小于pivot
            while (left < right && array[left] <= pivot) {
                left++;
            }
            //left下标的值 大于pivot
            swap(array,left,right);
        }
        //交换 和 原来的left
        swap(array,left,i);
        return left;
    }

2、挖坑法

挖坑法的基本思想就是把第一个元素取出来,形成一个坑位,然后定义两个指针left和right,先让right从右往左走,找到第一个比tmp小的元素,如果找到,那么把这个元素放到tmp的位置,同理,left从前往后遍历,找到比tmp大的元素的下标,然后用这个元素覆盖array[right],循环结束以后,将tmp放在array[left]的位置,最后返回left便是我们的基准!

代码实现:

  private static int partition2(int[] array,int left,int right) {//挖坑法,优先使用
        int pivot = array[left];
        while (left < right) {
            //left < right &&  这个条件不能少 预防后面都比基准大
            while (left < right && array[right] >= pivot) {
                right--;
            }
            array[left] = array[right];
            //right下标的值 小于pivot
            while (left < right && array[left] <= pivot) {
                left++;
            }
            array[right] = array[left];
        }
        //交换 和 原来的left
        array[left] = pivot;
        return left;
    }

3、前后指针法

前后指针法的思路有点难理解,基本思想就是结合代码来看,我们定义一个临时节点cur,然后令cur= left+1,然后循环条件是cur<=right,能够交换的条件就是当array[cur] < array[left] && array[++prev] != array[cur],然后cur++,继续往后找。

1、找到符合条件的元素

ba5a5725f3264b2f92ceb05e5287586b.png

 2、交换cur和prev。

4eae8ca273c3426080ed1f452fdb7da1.png

 3、交换之后,cur++

85834845d84c48c68aa87d6d340cf587.png

代码实现:

    private static int partition(int[] array, int left, int right) {//前后指针法
        int prev = left ;
        int cur = left+1;
        while (cur <= right) {
            if(array[cur] < array[left] && array[++prev] != array[cur]) {
                swap(array,cur,prev);
            }
            cur++;
        }
        swap(array,prev,left);
        return prev;
    }

快速排序总结:

1. 快速排序整体的综合性能和使用场景都是比较好的,所以才敢叫快速排序 。
2. 时间复杂度:O(N*logN)。

最坏情况下能达到O(N^2)。

3. 空间复杂度:O(logN) 。
4. 稳定性:不稳定 。

快速排序测试

那么快速排序既然敢叫快速排序,那么它的速度应该是非常快的,我们定义一个逆序的数组来测试一下。

00d0809a5df744089dcaef4e924e148d.png

 那么问题就是当数组中的元素趋于有序的时候,即形成了单分支。这个时候我们的快速排序效率是非常低下的且空间复杂,时间复杂度会达到最大,而空间复杂度度会随之改变。

当元素数量达到100000左右的时候,程序就会崩溃,因为idea默认在栈上开辟的内存空间是有限的,我们来测试一下。

ffaa2ef47cc7446eac1516c63223945d.png

 快速排序优化

1、三数取中法

基本思想就是我们取3个数的中间数(index)作为我们的基准,然后交换start和index。

代码:找中间数

 private static int findMidValOfIndex(int[] array,int start,int end) {//找中间值
        int midIndex = (start+end) / 2;
        //    3                 9
        if(array[start] < array[end]) {
            if(array[midIndex] < array[start]) {
                return start;
            }else if(array[midIndex] > array[end]) {
                return end;
            }else {
                return midIndex;
            }
        }else {
            if(array[midIndex] > array[start]) {
                return start;
            }else if(array[midIndex] < array[end]) {
                return end;
            }else {
                return midIndex;
            }
        }
    }

2、子区间插入排序

大概意思就是我们递归的主体主要分布在二叉树的靠下面的节点,那么可以考虑当我们的元素较少且趋于有序的时候采用插入排序来完成!

代码实现:

    private static void insertSort(int[] array,int left,int right) {
        for (int i = left+1; i <= right; i++) {
            int tmp = array[i];
            int j = i-1;
            for (; j >= left;j--) {
                if(array[j] > tmp) {
                    array[j+1] = array[j];
                }else {
                    //array[j+1] = tmp;
                    break;
                }
            }
            array[j+1] = tmp;
        }
    }

六、归并排序

1、基本思想

归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使 子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 归并排序核心步骤:
17154206707541f296a3025c4c781a53.gif

 1、递归实现归并排序

    public static void MergeSort(int[] array) {
        mergeSortChild(array,0,array.length-1);
    }

    private static void mergeSortChild(int[] array,int left,int right) {
        if(left == right) {
            return;
        }
        int mid = (left+right) / 2;
        mergeSortChild(array,left,mid);
        mergeSortChild(array,mid+1,right);
        //合并
        merge(array,left,mid,right);
}

    private static void merge(int[] array,int left,int mid,int right) {//归并
        int s1 = left;
        int e1 = mid;
        int s2 = mid+1;
        int e2 = right;
        int[] tmpArr = new int[right-left+1];
        int k = 0;//表示tmpArr 的下标
        while (s1 <= e1  && s2 <= e2) {
            if(array[s1] <= array[s2]) {
                tmpArr[k++] = array[s1++];
            }else{
                tmpArr[k++] = array[s2++];
            }
        }
        while (s1 <= e1) {
            tmpArr[k++] = array[s1++];
        }
        while (s2 <= e2) {
            tmpArr[k++] = array[s2++];
        }
        //tmpArr当中 的数据 是right  left 之间有序的数据
        for (int i = 0; i < k; i++) {
            array[i+left] = tmpArr[i];
        }
    }

效率测试

99454112028a4ac7bb5acdb757af04cb.png

归并排序总结
1. 归并的缺点在于需要O(N)的空间复杂度,归并排序的思考更多的是解决在磁盘中的外排序问题。
2. 时间复杂度:O(N*logN)。
3. 空间复杂度:O(N)。
4. 稳定性:稳定。

 2、非递归实现归并排序 

非递归的思想就是假如我们有8个待排序的元素,那么非递归的做法就是22 44 88,即两两比较完了之后4个一起比较,再然后8个一起比较,直到所有元素都比较完。

62ce8f4555794af8bb21a8e322baae4f.png

 代码演示:

  public static void MergeSort1(int[] array) {
        int gap = 1;
        while (gap < array.length) {
            for (int i = 0; i < array.length; i += gap*2) {
                int left = i;
                int mid = left + gap -1;
                int right = mid+gap;
                if(mid >= array.length) {
                    mid = array.length-1;
                }
                if(right >= array.length) {
                    right = array.length-1;
                }
                merge(array,left,mid,right);
            }
            gap *= 2;
        }
    }

结果测试

8b817e27c45944d380e6ff09dc2f901f.png

 🥞🥞好了,那么以上就是java实现七大排序算法的全部内容了,本篇博客博主也是耗费了2天的精力才整理完毕的,实属不易,那么当然了,还有一些其他的排序算法本篇博客没有提及到,博主所写内容基本都是针对面试的重要知识点,也是非常常见的题型,后续有精力的话博主会补充一些额外的排序知识点供大家学习,那么如果能掌握以上的全部内容,那么我相信,你一定也是个排序小高手了,嘿嘿!💝💝感谢阅读,期待一键三连!🤟🤟

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

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

相关文章

刷爆leetcode第十一期 0023~0025

刷爆leetcode第十一期 编号0023 相同的树编号0024 对称二叉树编号0025 另一个树的子树编号0023 相同的树 给你两棵二叉树的根节点 p 和 q &#xff0c;编写一个函数来检验这两棵树是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的值&#xff0c;则认为它们是…

多旋翼无人机仿真 rotors_simulator:用键盘控制无人机飞行

多旋翼无人机仿真 rotors_simulator&#xff1a;用键盘控制无人机飞行前言书接上文接口测试键盘指令发布指令转换与发布修改 rotors_simulator 的控制接口节点测试前言 RotorS 是一个MAV gazebo 仿真系统。 提供了几种多旋翼仿真模型&#xff0c;例如 AscTec HummingbirdAsc…

PHP反序列化

序列化与反序列化 序列化 反序列是指把对象转换为字符串的过程&#xff0c;便于在内存、文件、数据库中保存、传输&#xff0c;PHP中使用serialize函数进行序列化。 <?phpclass Person{public $name"php";protected $id;private $age;}$a new Person();$a_se…

全排列笔记

14天阅读挑战赛 全排列 题目 给定一个 没有重复 数字的序列&#xff0c;返回其所有可能的全排列。 示例: 输入: [1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 解答 方法一&#xff1a;回溯 思路 从高中的数学知识我们可以知道 从[1,2,3…

如何在Linux上优雅地写代码-Linux生存指南

初入Linux&#xff0c;发现老是要面对一个命令行&#xff0c;大黑框&#xff0c;看不懂各种手册&#xff0c;写代码也是用vi/vim&#xff0c;难受的捉急。其实Linux下的各种工具&#xff0c;强大得超出你的想象&#xff0c;如果你初入Linux&#xff0c;那么你急需阅读这篇文章&…

操作系统的主要功能

目录 一. 处理机管理功能 1.1 进程控制 1.2 进程同步 1.3 进程通信 1.4 进程调度 二. 存储器管理功能 2.1 内存分配 2.2 内存保护 2.3 地址映射 2.4 内存扩充 三. 设备管理功能 3.1 缓冲管理 3.2 设备分配 3.3 设备处理 3.4 设备独立性和虚拟设备 四…

关于Python爬虫兼职,这里有一条高效路径

前言 昨天&#xff0c;一位00后前来报喜&#xff0c;也表达感谢。 他说&#xff0c;当初刚毕业啥也不会也找不到工作&#xff0c;最后听了我的&#xff0c;边学爬虫边做兼职项目&#xff0c;积极主动求职投简历&#xff0c;既可以兼职获得收益&#xff0c;也能积累项目经验谋求…

Linux:以K、M、G查看文件大小;

简介&#xff1a;灵活多变的查看文件的大小 历史攻略&#xff1a; Linux&#xff1a;sudo免密 python&#xff1a;执行dos命令、Linux命令 案例源码&#xff1a; # 以适当方式显示文件大小&#xff1a; ls -lh# 以byte显示文件大小&#xff1a; ls -l# 以M显示文件大小&am…

NR PUSCH(五) DMRS

微信同步更新欢迎关注同名modem协议笔记 PUSCH DMRS和PDSCH DMRS内容基本一样&#xff0c;但也有不同的地方&#xff0c;例如PUSCH 可能需要Transform precoding&#xff0c;port 对应0~11(DMRS configured type2)等等。先简单看看Transformprecoding的相关内容&#xff0c;Tr…

Excel数据分析实战之开宗明义: Excel与数据分析实战

大家好&#xff0c;我是爱编程的喵喵。双985硕士毕业&#xff0c;现担任全栈工程师一职&#xff0c;热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。喜欢通过博客创作的方式对所学的知识进行总结…

军用大数据 - Spark机器学习

文章目录第1关&#xff1a;Iris 分类任务描述相关知识1&#xff1a;观察数据集2&#xff1a;RFormula 特征提取3&#xff1a;pandas 的 concat 函数编程要求代码实现————————————————————————————————————————第2关&#xff1a;图片识…

网络原理 --- 传输层Ⅲ TCP协议中的滑动窗口,流量控制和拥塞控制

文章目录网络原理传输层TCP协议4.滑动窗口5.流量控制6.拥塞控制总结网络原理 介绍TCP/IP协议中每一层里面的核心内容~ 应用层传输层网络层数据链路层物理层 传输层TCP协议 4.滑动窗口 TCP能够保证可靠传输,但是失去了效率! 但是TCP希望能够在保证可靠性的前提下,尽可能地提…

达梦数据库在不修改SQL的情况下为SQL指定HINT

前言 在Oracle中可以使用outline、SQL PROFILE等手段去在无需修改SQL语句的情况下&#xff0c;来保证SQL执行计划在不同硬件环境下相同&#xff0c;从而保证SQL语句在不同环境的执行效率。那么&#xff0c;在达梦数据库中则可以使用SF_INJECT_HINT系统函数达到类似的效果。 SF…

Java学习笔记 --- 异常

一、基本介绍 Java语言中&#xff0c;将程序执行中发生的不正常情况称为“异常”。&#xff08;开发过程中的语法错误和逻辑错误不是异常&#xff09; 执行过程中所发生的异常事件可以分为两类 1、Error&#xff08;错误&#xff09;&#xff1a;Java虚拟机无法解决的严重问…

十月了,请问2022届的同学们都找到工作了吗?

今年的就业大环境就不多说了&#xff0c;大家都知道。一边是超千万规模的应届毕业生&#xff0c;叠加教培、地产等行业裁员&#xff1b;另一边则是疫情反复影响之下&#xff0c;企业瘦身裁员、停招、缩招。在白领性质的劳动力市场&#xff0c;劳动力供给严重大于需求&#xff0…

【C语言】解题训练

目录 字符串左旋 方法1 方法2 字符串旋转结果判断 方法1 方法2 杨氏矩阵 位段 题目1 题目2 联合体 题目1 题目2 有序序列合并 变种水仙花 找单身狗 字符串左旋 实现一个函数&#xff0c;可以左旋字符串中的k个字符。 例如&#xff1a; ABCD左旋一个字符得到…

纷享销客联合B.P商业伙伴携手30+企业CEO走进南天信息

数字化智能化建设的当下&#xff0c;数字化服务商承担着承上启下的核心力量。企业数字化转型成为刚需&#xff0c;意味着ICT企业的市场前景持续乐观&#xff0c;但在疫情和竞争加剧之下&#xff0c;企业发展也遭遇增长的挑战&#xff0c;如何在数字中国的趋势之下&#xff0c;乘…

大学网课搜题公众号系统

大学网课搜题公众号系统 本平台优点&#xff1a; 多题库查题、独立后台、响应速度快、全网平台可查、功能最全&#xff01; 1.想要给自己的公众号获得查题接口&#xff0c;只需要两步&#xff01; 2.题库&#xff1a; 题库&#xff1a;题库后台&#xff08;点击跳转&#xf…

【从小白到大白05】c和c++内存管理

c和c内存管理 文章目录c和c内存管理c内存管理方式new/delete操作内置类型new申请动态空间delete释放空间new和delete操作自定义类型operator new与operator delete函数new[]和delete[]定位new&#xff08;placement-new&#xff09;总结以上内存泄露以上就是全部内容啦&#xf…

WPS-JS宏开发-基础知识-03-三大基本结构

系统&#xff1a;Windows 11 软件&#xff1a;WPS表格11 本系列介绍一款类Excel的软件&#xff0c;WPS表格当然也是介绍其宏开发&#xff0c;不同的是&#xff0c;使用的JS宏会同样介绍多个系列&#xff0c;本系列介绍一些基础知识 Part 1&#xff1a; 三大逻辑结构 一个具体的…