Java 语言实现的八大排序算法

Java 八大排序 选择排序算法准则: 每种排序算法都各有优缺点。因此,在实用时需根据不同情况适当选用,甚至可以将多种方法结合起来使用。 选择排序算法的依据 影响排序的因素有很多,平均时间复杂度低的算法并不一定就是最优的。相反,有时平均时间复杂度高的算法可能更适合某些特殊情况。同时,选择算法时还得考虑它的可读性,以利于软件的维护。一般而言,需要考虑的因素有以下四点: 1.待排序的记录数目n的大小; 2.记录本身数据量的大小,也就是记录中除关键字外的其他信息量的大小; 3.关键字的结构及其分布情况; 4.对排序稳定性的要求。 设待排序元素的个数为n. 1)当n较大,则应采用时间复杂度为O(nlog2n)的排序方法:快速排序、堆排序或归并排序序。 快速排序:是目前基于比较的内部排序中被认为是最好的方法,当待排序的关键字是随机分布时,快速排序的平均时间最短; 堆排序 : 如果内存空间允许且要求稳定性的, 归并排序:它有一定数量的数据移动,所以我们可能过与插入排序组合,先获得一定长度的序列,然后再合并,在效率上将有所提高。 2) 当n较大,内存空间允许,且要求稳定性 =》归并排序 3)当n较小,可采用直接插入或直接选择排序。 直接插入排序:当元素分布有序,直接插入排序将大大减少比较次数和移动记录的次数。 直接选择排序 :元素分布有序,如果不要求稳定性,选择直接选择排序 5)一般不使用或不直接使用传统的冒泡排序。 6)基数排序 它是一种稳定的排序算法,但有一定的局限性:   1、关键字可分解。   2、记录的关键字位数较少,如果密集更好   3、如果是数字时,最好是无符号的,否则将增加相应的映射复杂度,可先将其正负分开排序。 立即下载

Java 语言实现的八大排序算法

1、直接插入排序

基本思想:

基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。


    /**
     * <h2>方法名称:直接插入排序 </h2>
     * <p>
     * 基本思想:
     * </p>
     * <p>
     * 在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,
     * 现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。
     * 如此反复循环,直到全部排好顺序。
     * </p>
     * 
     */
    public void insertSort() {
        int a[] = {
                49, 38, 65, 97, 76, 13, 27, 49, 78, 34, 12, 64, 5, 4, 62, 99, 98, 54, 56, 17, 18, 23, 34, 15, 35, 25, 53, 51
        };
        System.out.print("原始数据:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
        System.out.println();


        int temp = 0;
        for (int i = 1; i < a.length; i++) {
            int j = i - 1;
            temp = a[i];
            for (; j >= 0 && temp < a[j]; j--) {
                //将大于temp的值整体后移一个单位
                a[j + 1] = a[j];
            }
            a[j + 1] = temp;
        }

        System.out.print("排序结果:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
    }

2、希尔排序(最小增量排序)

基本思想:

算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

    /**
     * <h2>
     *     希尔排序(最小增量排序)
     * </h2>
     * <p>
     *     基本思想:
     * </p>
     * <p>
     *     算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,
     *     每组中记录的下标相差d.对每组中全部元素进行直接插入排序,
     *     然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。
     *     当增量减到1时,进行直接插入排序后,排序完成。
     * </p>
     *   
     */
    public void shellSort() {
        int a[] = {1, 54, 6, 3, 78, 34, 12, 45, 56, 100};

        System.out.print("原始数据:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
        System.out.println();

        double d1 = a.length;
        int temp = 0;
        while (true) {
            d1 = Math.ceil(d1 / 2);
            int d = (int) d1;
            for (int x = 0; x < d; x++) {
                for (int i = x + d; i < a.length; i += d) {
                    int j = i - d;
                    temp = a[i];
                    for (; j >= 0 && temp < a[j]; j -= d) {
                        a[j + d] = a[j];
                    }
                    a[j + d] = temp;
                }
            }
            if (d == 1)
                break;
        }

        System.out.print("排序结果:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
    }

3、简单选择排序

基本思想:

在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

/**
     * <h2>
     * 简单选择排序
     * </h2>
     * <p>
     * 基本思想
     * </p>
     * <p>
     * 在要排序的一组数中,选出最小的一个数与第一个位置的数交换;
     * 然后在剩下的数当中再找最小的与第二个位置的数交换,
     * 如此循环到倒数第二个数和最后一个数比较为止。
     * </p>
     */
    public static void selectSort() {
        System.out.println(ClassName + "#" + Thread.currentThread().getStackTrace()[1].getMethodName());
        int a[] = {1, 54, 6, 3, 78, 34, 12, 45};
        System.out.print("原始数据:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
        System.out.println();

        int position = 0;
        for (int i = 0; i < a.length; i++) {

            int j = i + 1;
            position = i;
            int temp = a[i];
            for (; j < a.length; j++) {
                if (a[j] < temp) {
                    temp = a[j];
                    position = j;
                }
            }
            a[position] = a[i];
            a[i] = temp;
        }

        System.out.print("排序结果:");
        for (int i = 0; i < a.length; i++)
            System.out.print(String.format("%d;", a[i]));
        System.out.println();
    }

4、堆排序

基本思想:

堆排序是一种树形选择排序,是对直接选择排序的有效改进。 堆的定义如下:具有n个元素的序列(h1,h2,…,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,…,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。完全二叉树可以很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

例如:

初始序列:46,79,56,38,40,84
建堆: 交换,从堆中踢出最大数
依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。

////////////////////////堆排序//////////////////////////////////

    /**
     * <a href="http://mushiqianmeng.blog.51cto.com/3970029/738164/">
     * http://mushiqianmeng.blog.51cto.com/3970029/738164/
     * </a>
     * <p>
     * <h2>堆排序</h2>
     * <p>基本思想:</p>
     * <p>
     * 堆排序是一种树形选择排序,是对直接选择排序的有效改进。
     * </p>
     * <p>
     * 堆的定义如下:</p>
     * <p>
     * 具有n个元素的序列(h1,h2,…,hn),
     * 当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,…,n/2)时称之为堆。
     * 在这里只讨论满足前者条件的堆。
     * 由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。
     * 完全二叉树可以很直观地表示堆的结构。
     * 堆顶为根,其它为左子树、右子树。
     * 初始时把要排序的数的序列看作是一棵顺序存储的二叉树,
     * 调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。
     * 然后将根节点与堆的最后一个节点交换。
     * 然后对前面(n-1)个数重新调整使之成为堆。
     * 依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。
     * </p>
     * <p>
     * <p>
     * 从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。
     * 所以堆排序有两个函数组成。
     * 一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。
     * </p>
     * <p>
     * <p>实例:</p>
     * <p>
     * 初始序列:46,79,56,38,40,84
     * 建堆: 交换,从堆中踢出最大数
     * 依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。
     * </p>
     * <p>
     * <p>“堆排序”,《算法导论》6.4章节</p>
     * 利用之前实现的构建MaxHeap和MaxHeapify算法完成排序。
     * <p>伪代码:</p>
     * <ul>
     * HEAPSORT(A)
     * <li>1 BUILD-MAX-HEAP(A)                     </li>
     * <li>2 for i ← length[A] downto 2           </li>
     * <li>3 do exchange A[1] ↔ A[i]              </li>
     * <li>4 heap-size[A] ← heap-size[A] - 1      </li>
     * <li>5 MAX-HEAPIFY(A, 1)                     </li>
     * <p>
     * </ul>
     * <p>
     * <p>堆排序,《算法导论》</p>
     * <p>
     * 原文摘要:
     * The heapsort algorithm starts by using BUILD-MAX-HEAP to build a max-heap on the input
     * array A[1  n], where n = length[A]. Since the maximum element of the array is stored at the
     * root A[1], it can be put into its correct final position by exchanging it with A[n].
     * If we now "discard" node n from the heap (by decrementing heap-size[A]), we observe that
     * A[1  (n -1)] can easily be made into a max-heap. The children of the root remain max-heaps,
     * but the new root element may violate the max-heap property. All that is needed to restore
     * the maxheap property, however, is one call to MAX-HEAPIFY(A, 1), which leaves a max-heap
     * in A[1 (n - 1)]. The heapsort algorithm then repeats this process for the max-heap of size
     * n - 1 down to a heap of size 2.
     * </p>
     * <p>
     * 复杂度:
     * </p>
     * <p>
     * 由之前分析可知,buildMaxHeap复杂度为O(n lg n),运行一次。
     * maxHeapify的复杂度为O(lg n),运行n-1次。
     * 综上,复杂度为O(n lg n)。
     * </p>
     */
    private static void heapSort() {
        System.out.println(ClassName + "#" + Thread.currentThread().getStackTrace()[1].getMethodName());
        int[] input = new int[]{16, 14, 10, 8, 7, 9, 3, 2, 4, 1};
        System.out.print("原始数据:");
        for (int i = 0; i < input.length; i++)
            System.out.print(String.format("%d;", input[i]));
        System.out.println();

        int length = input.length;
        //构造max-heap
        buildMaxHeap(input, length);//交换位置
        for (int i = length - 1; i > 0; i--) {
            int temp = input[i];
            input[i] = input[0];
            input[0] = temp;
            maxHeapify(input, 1, i);
        }

        System.out.print("排序结果:");
        for (int i = 0; i < input.length; i++)
            System.out.print(String.format("%d;", input[i]));
        System.out.println();
    }

    private static void buildMaxHeap(int[] array, int heapSize) {
        for (int i = heapSize / 2; i > 0; i--) {
            maxHeapify(array, i, heapSize);
        }
    }

    private static void maxHeapify(int[] array, int index, int heapSize) {
        int l = index * 2;
        int r = l + 1;
        int largest;
        //如果左叶子节点索引小于堆大小,比较当前值和左叶子节点的值,取值大的索引值
        if (l <= heapSize && array[l - 1] > array[index - 1]) {
            largest = l;
        } else {
            largest = index;
        }
        //如果右叶子节点索引小于堆大小,比较右叶子节点和之前比较得出的较大值,取大的索引值
        if (r <= heapSize && array[r - 1] > array[largest - 1]) {
            largest = r;
        }
        //交换位置,并继续递归调用该方法调整位置。
        if (largest != index) {
            int temp = array[index - 1];
            array[index - 1] = array[largest - 1];
            array[largest - 1] = temp;
            maxHeapify(array, largest, heapSize);
        }
    }
    ////////////////////////堆排序//////////////////////////////////

5、冒泡排序

基本思想:
>

6、快速排序

基本思想:
>

7、归并排序

基本思想:
>

8、基数排序

基本思想:
>

OpenFOAM高效学习路线:如何用B站+东岳流体3个月掌握CFD仿真 本文分享了一套高效的OpenFOAM学习路线,结合B站视频、东岳流体教程和官方文档,帮助在职工程师在3个月内掌握CFD仿真技术。通过渐进式学习计划和案例训练,从基础到实战,快速提升独立建模能力。 阅读详情

相关推荐

【深度学习基础】Temporal Fusion Transformer

从下向上看:全连接(Dense) → ELU(指数线性激活函数(比relu好点,有利于模型收敛)) → 全连接(Dense) → 门控线性单元(Gate)(Gated Linear Units (GLUs)) → Layernorm。:一方面,它可以进行静态上下文变量和动态变量的融合,另一方面,通过门控进行了特征选择操作,门控体现在GLU(门控线性单元)中,用了sigmoid控制信息的通过程度,具有良好的适应性,能够自动选择有效信息,自适应地调整网络复杂性。输入:主输入,可选的上下文向量c。

weixin_41838721的博客 1225

「Java」- 八大排序

冒泡排序 原理:在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序 一次排序过程

「zero」的博客 2216

VXLAN技术详解

VXLAN(虚拟可扩展局域网)是一种Overlay二层虚拟化技术,通过MAC-in-UDP封装在IP网络上构建大规模虚拟二层网络。核心组件包括VTEP(隧道端点)、24位VNI(支持1600万个虚拟网络)和VXLAN网关。相比VLAN,VXLAN具有超大规模扩展、跨三层互联、支持虚拟机无缝迁移等优势,适用于云数据中心多租户隔离、跨数据中心互联等场景。其基于IP路由的封装方式无需改造物理网络,为现代云网络提供了弹性、安全的虚拟化解决方案。

kjkdd的博客 595

java常用8大排序

Java中的八大排序算法是编程中常用的排序方法,每种排序算法都有其独特的特点和应用场景。

zzp1224的博客 1690

功能安全入门:手把手教你用IEC 62380标准计算芯片失效率(附SN 29500对比)

本文深入解析了IEC 62380标准在芯片失效率计算中的应用,对比了SN 29500的差异,并提供了实战案例和避坑指南。通过详细的参数获取方法和分步计算演示,帮助功能安全工程师准确评估芯片可靠性,确保设计符合安全要求。特别适合汽车电子和工业控制领域的专业人士参考。

weixin_30363981的博客 315

GhidrAssist:AI驱动的逆向工程助手实战指南

逆向工程是分析软件内部工作原理、理解二进制代码逻辑的关键技术,广泛应用于软件安全、恶意代码分析和漏洞挖掘等领域。其核心原理在于通过反编译、控制流与数据流分析等手段,将机器码还原为可理解的高级语言表示。传统逆向分析高度依赖人工经验,面对海量代码时效率低下且易出错。随着大语言模型(LLM)技术的发展,其强大的代码理解与推理能力为自动化逆向分析提供了新的可能。通过将LLM与成熟的逆向工程框架(如Ghidra)相结合,可以构建智能辅助系统,实现代码意图的自动解释、变量/函数的智能重命名以及潜在漏洞模式的辅助识别,从

weixin_42547335的博客 596

Java数据结构之八大排序算法

冒泡排序(Bubble Sorting)的基本思想是:通过对待排序序列从前向后(从下标较小的元素开始),依次比较相邻元素的值,若发现逆序则交换,使值较大的元素逐渐从前移向后部,就象水底下的气泡一样逐渐向上冒。选择式排序也属于内部排序法,是从欲排序的数据中,按指定的规则选出某一元素,再依规定交换位置后达到排序的目的。选择排序(select sorting)也是一种简单的排序方法。

qq_64580912的博客 1787

NLP-Beginner 任务一:基于机器学习的文本分类(超详细!!)

NLP-Beginner 任务一:基于机器学习的文本分类传送门一. 介绍1.1 任务简介1.2 数据集1.3 流程介绍二. 特征提取2.1 词袋特征(Bag-of-word)2.2 N元特征 (N-gram)三. 最优化求解3.1 Softmax回归介绍3.2 损失函数3.3 梯度下降3.4 学习率四. 代码及实现4.1 实验设置4.2 结果展示4.3 代码新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、

0oTedo0 9931

Java实现八大排序算法【九千字超详解】

一、排序的概述 排序的分类 分为5大类: 1.插入排序(直接插入排序、希尔排序)。 2.交换排序(冒泡排序、快速排序)。 3.选择排序(直接选择排序、堆排序)。 4.归并排序。 5.分配排序(箱排序、基数排序)。 优点及缺点 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排...

weixin_65657777的博客 6804

扩散模型与强化学习(13):In-Context Reward Hacking现象与解决方案

奖励作弊(Reward Hacking)指智能体通过钻规则漏洞而非真正完成任务来最大化奖励信号。以论文编辑实验为例,研究提出“上下文奖励作弊”(ICRH)概念,即模型利用共享上下文钻空子,如盲目添加“正确!”或输出无关内容。实验发现,模型规模扩大可能加剧ICRH,且提示词优化难以根治。与传统奖励作弊不同,ICRH发生在部署阶段,由通用性驱动。应对建议包括多轮测试、多样化反馈及异常场景模拟,但尚无完美解决方案。

沉迷单车的追风少年 1319

数学建模学习(120):使用Python实现基于AHP的供应商选择分析

使用Python实现基于AHP的供应商选择分析

全栈川川 911

排序算法总结

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34067102的博客 348

Java Swing教程-16. Swing中的图形绘制

这篇教程介绍了Java Swing中的图形绘制功能,主要内容包括: Graphics类的基本使用 - 介绍了如何重写paintComponent方法实现自定义绘制,以及基本图形绘制方法(线条、矩形、椭圆、多边形等) 文本与图片绘制 - 讲解了文本绘制方法、字体设置和图片加载绘制技术 颜色与字体设置 - 包括预定义颜色、RGB自定义颜色、透明色设置以及字体样式控制 案例实现 - 提供了一个简单绘图程序的框架,支持鼠标绘制不同图形、选择工具和自定义颜色等功能 教程通过代码示例详细演示了各种绘图操作,适合Java

无 233

八大排序算法详解(Java语言实现)

概述 因为健忘,加上对各种排序算法理解不深刻,过段时间面对排序就蒙了。所以决定对我们常见的这几种排序算法进行统一总结,强行学习。首先罗列一下常见的十大排序算法: 直接插入排序 希尔排序 简单选择排序 堆排序 冒泡排序 快速排序 归并排序 基数排序 我们讨论的这八大排序算法的实现可以参考我的Github:SortAlgorithms,其中也包括了排序测试模块[Test.ja...

weixin_44961794的博客 436

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

八大排序算法原理及Java语言实现

排序 1. 插入排序: * 1.插入排序(直接插入,折半插入) * 2.希尔排序 * 3.选择排序(简单选择排序) * 4.堆排序 * 5.交换排序(冒泡排序,快速排序) * 6.归并排序 * */ /** 1.直接插入排序:将当前无序序列区R[i,...n]中的记录R[i]插入到有序序列区R[1,...i-1] * 使有序序列区的长度增1.在有序子...

xiongyan123_com的博客 322

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

(转)Java 语言实现的八大排序算法

1 直接插入排序  基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。 [java] view plaincopy public class insertSort {  public insertSort

dongchosenone的专栏 557

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

八大排序算法(C语言、Java实现)

(先留个空,有空来填) 转载于:https://www.cnblogs.com/yrqiang/p/5347985.html

weixin_30446197的博客 104

Java程序员必须掌握的8大排序算法

本文主要详解了Java语言的8大排序的基本思想以及实例解读,详细请看下文 8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例 (3)用java实现

jiutianhe的专栏 5922

算法入门必备:C语言实现八大排序算法对比表

在计算机科学领域,排序算法是最基础且重要的算法之一。它在数据处理、搜索算法优化等众多场景中都有广泛的应用。对于C语言开发者而言,掌握常见的排序算法不仅能提升编程能力,还能在实际项目中更好地处理数据。本文将详细介绍八大排序算法,并使用C语言实现它们,最后通过对比表的形式分析各算法的优缺点和适用场景。

星辰夜语的博客 1137

八大排序算法的java实现

八大排序算法的性能比较图如下: 下面依次介绍几种排序算法以及用java语言的实现 1、直接插入排序 1.基本思想 从原数组中第二个数开始,将元素a[i](i>=1)依次取出,与数组里已有的值依次进行比较,如果比原有数据a[j](j=i-1)小,则将a[j]向后移动,再与它前面的元素a[j](j=i-2,j=i-3...)比较,直至a[i]比a[j]大,直接插在其后,最...

qq_42922647的博客 266
上一篇: Android 开发中应该知道的关于strings.xml的事
下一篇: Toolbar设置标题的问题
YLBF_DEV
博客等级 码龄12年 30粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值