基础算法(排序)

基础排序算法总结 一、冒泡排序 冒泡排序的普通思路:          比较相邻的两个元素,交换元素使得小元素在前、大元素在后。          第一次排序将对n个元素进行n-1次比较,将最大的元素放到了数组的最后边;          第二次排序将剩下的n-1个元素进行n-2次比较,将第二大的数放在数组的倒数第二个位置;          依次进行该过程;          第n-1趟则所有元素 阅读详情

1. 简单选择排序。

排序原理:每次选择数组中最小的元素放在数组开头,多次循环完成排序。

例如:数组 [3,7,2,9,3,1,0,6] 的排序过程:

[3       7       2       9       3       1       0       6]

[3       7       2       9       3       1      0       6](寻找最小元素)

[0       7       2       9       3       1       3       6](交换)

0        [7      2       9       3       1       3       6](寻找最小元素)

0        [1      2       9       3       7       3       6](交换)

… …

0        1       2       3       3       6       7       9

 

程序如下:

 

#include <stdio.h>
#define INF 0xffff
//输出数组
void outputArray(int test[], int length)
{
    int i;
    for(i = 0; i < length; i++)
        printf("%d ", test[i]);
    printf("\n");
}
//交换两个数
void swap_num(int &a,int &b)
{
    int temp = b;
    b = a;
    a = temp;
}
//简单选择排序
void simpleSort(int test[], int length)
{
    int i,j;
    for(i = 0; i < length - 1; i++)
    {
        int min_j = i + 1;
        for(j = i + 1; j < length; j++)
        {
            if(test[j] < test[min_j])
                min_j = j;
        }
        if(test[i]>test[min_j])
            swap_num(test[i],test[min_j]);
    }
}
int main()
{
    int test[] = {3,7,2,9,3,1,0,6};
    int length = sizeof(test) / sizeof(int);
    printf("排序前:");
    outputArray(test, length);
    printf("排序后:");
    simpleSort(test, length);
    outputArray(test, length);
    return 0;
}

 

复杂度分析:

由于使用了2个for循环,时间复杂度为O(n^2);排序的时候是在数组内部进行,空间复杂度为O(1)。由于是交换排序,所以排序过程是不稳定的。

 

2. 冒泡排序。

排序原理:依次比较两个相邻的元素,如果顺序不对就交换。重复以上步骤,直到没有可以交换的元素为止。

例如:数组 [3,7,2,9,3,1,0,6] 的排序过程:

[3       7       2       9       3       1       0       6]

[3       2       7       9       3       1       0       6]

[3       2       7       9       3       1       0       6]

[3       2       7       3       9       1       0       6]

[3       2       7       3       1       9       0       6]

[3       2       7       3       1       0       9       6]

[3       2       7       3       1       0       6       9](第一轮排序完成,第一趟排序确定了最大的数为9)

[2       3       3       1       0       6       7       9](第二轮排序完成,第二趟排序确定了最二大的数为7)

[2       3       1       0       3       6       7       9](第三轮排序完成,第三趟排序确定了最三大的数为6)

[2       1       0       3       3       6       7       9](第四轮排序完成)

[1       0       2       3       3       6       7       9](第五轮排序完成)

[0       1       2       3       3       6       7       9](第六轮排序完成)

 

程序如下:

flag变量表示是否存在可以交换的元素;

//冒泡排序
void bubbleSort(int test[], int length)
{
    int flag = 1;
    while(flag){
        flag = 0;
        for(int i = 0; i < length-1; i++){
            if(test[i] > test[i+1]){
                flag = 1;
                swap_num(test[i], test[i+1]);
            }
        }
        //outputArray(test, length);
    }
}
// Java
public void bubbleSort(int[] arr) {
    for(int i = arr.length - 1; i >= 0; i--) {   // 经历arr.length-1趟排序
        for(int j = 0; j < i; j++) {
            if(arr[j] > arr[j + 1])
                swap(arr, j, j + 1);
        }
    }
}
private void swap(int[] arr, int i, int j) {
    int t = arr[i];
    arr[i] = arr[j];
    arr[j] = t;
}

复杂度分析:

两层循环,时间复杂度O(n^2),空间复杂度O(1),由于冒泡排序始终保证小元素在大元素前面,所以是稳定的排序。

 

3. 插入排序。

排序原理:创建一个空数组,遍历排序数组的每个元素,使其插入到创建数组的合理位

置,完成排序。

例如:数组[3,7,2,9,3,1,0,6] 的排序过程:

[3]      [7      2       9       3       1       0       6]

[3       7]      [2      9       3       1       0       6]

[2       3       7]      [9      3       1       0       6]

… …

[0       1       2       3       3       6       7       9]

 

插入的详细过程如下:

[1       5       8       9]      [4]

首先让4和9比较,如果4<9,两者交换位置;4再和8比较,两者交换位置;4再和5比较,两者交换位置;4和1比较,4>1,跳出循环,插入过程结束。

 

程序如下:

void insertSort(int test[],int length)
{
    int i, j, num;
    for(i = 1; i < length; i++){    // 从test[1]开始执行插入操作
        //寻找插入的位置的同时,让数组元素右移
        num = test[i];   //记录要插入的值
        j = i - 1;
        while(num < test[j] && j >= 0){
            test[j + 1] = test[j];
            j--;
        }
        test[j + 1] = num;
    }
}

 

4. 希尔排序。

排序原理:希尔排序是基于插入排序的方法;通过增量delta将序列分成几个小序列,通过插入排序使小序列有序;当delta=1时,完成排序后即完成了最终排序。

例如:数组[3,7,2,9,3,1,0,6] 的排序过程:

当delta=4时,数组分为4组,如下所示:(3,3)(7,1)(2,0)(9,6)

每一组进行插入排序,得到结果:[3 1 0 6 3 7 2 9]

当delta=2时,数据分为2组,如下所示:(3,0,3,2)(1,6,7,9)

每一组进行插入排序,得到结果: [0 1 2 6 3 7 3 9]

当delta=1时,数据只有一组,完成插入排序,结果为:[0 1 2 3 3 6 7 9]

 

程序如下:

void insertSort(int test[], int length, int delta)
{
    int i, j, k, num;
    
    for(k = 0; k < delta; k++){   //有delta个子序列, k表示第k个子序列
        for(i = k + delta; i < length; i += delta){  // 对第k个自序列进行插入排序
            j = i - delta;
            num = test[i];
            while(num < test[j] && j >= 0){
                test[j + delta] = test[j];
                j -= delta;
            }
            test[j + delta]=num;
        }
    }
}

void shellSort(int test[], int length, int delta[], int delta_length)
{
    for(int i = 0; i < delta_length; i++)
        insertSort(test, length, delta[i]);
}

int main()
{
    int test[]={3,7,2,9,3,1,0,6};
    //设置增量数组
    int delta[]={4,2,1};
    int length=sizeof(test)/sizeof(int);
    int delta_length=sizeof(delta)/sizeof(int);

    printf("排序前:");
    outputArray(test,length);
    printf("排序后:");
    shellSort(test,length,delta,delta_length);
    return 0;
}

 

一般认为希尔排序的时间复杂度为O(n^1.5),适用于中规模序列排序。希尔排序是不稳定的排序。

 

5. 归并排序。

 

排序原理:运用了分治法的思想,把序列平均分成两段,把两段分别进行排序,再把排好的两段合在一起。对于子段排序时,递归调用上面的过程。

例如:数组[3,7,2,9,3,1,0,6] 的排序过程:

[3       7       2       9]      [3      1       0       6]      分组

[3       7]      [2      9]      [3      1]      [0      6]      递归分组

[3       7]      [2      9]      [1      3]      [0      6]      排序

[2       3       7       9]      [0      1       3       6]      合并

[0       1       2       3       3       6       7       9]      再合并,得到排序结果

 

合并的原理(双指针):设置两个指向子序列开始位置的指针,再建立一个空数组。让两个指针指向的值进行比较,较小的值进入数组,指向较小数的指针加1,指向下个位置。重复以上步骤,直到所有元素进入数组。

程序如下:

//将test数组的一部分进行归并排序
void mergeSort(int test[], int beginIndex, int endIndex, int length)
{
    int LL = endIndex - beginIndex + 1;
    int mid = (beginIndex + endIndex) / 2;
    if(LL <= 2) {     // 递归结束条件
        if(test[beginIndex] > test[endIndex]){
            int TT = test[beginIndex];
            test[beginIndex] = test[endIndex];
            test[endIndex] = TT;
        }
    }
    else{
        mergeSort(test, beginIndex, mid, length);
        mergeSort(test, mid+1, endIndex, length);
        //合并的过程
        int i = beginIndex;
        int j = mid + 1;
        int k = 0;
        int* temp = new int[LL];    // 新建一个数组
        while(i <= mid && j <= endIndex){
            if(test[i] <= test[j]){
                temp[k] = test[i];
                k++;
                i++;
            }
            else{
                temp[k]=test[j];
                k++;
                j++;
            }
        }
        while(i<=mid){
            temp[k]=test[i];
            k++;
            i++;
        }
        while(j<=endIndex){
            temp[k]=test[j];
            k++;
            j++;
        }
        //将temp写回test
        int ii,jj;
        for(ii = beginIndex, jj = 0; ii <= endIndex; ii++, jj++){
            test[ii] = temp[jj];
        }
    }
}

 

6. 快速排序。

排序原理:选择一个初始元素a,利用算法将数组分为两段:比a小,比a大。

将比a小的元素放在a前面,比a大的元素放在a的后面。再使用递归对前后两段进行如下操作,当每段元素只有2个或3个时,就停止上面操作,排序完成。

分组原理:假设序列为r[left],r[left+1],… … ,r[right],设置两个指针i和j,指向left和right。

x=r[left];反复执行以下操作使得i,j相遇。

①j向左扫描,直到r[j]<x,r[i]=r[j],r[j]置为空;

②i向右扫描,直到r[i]>x,r[j]=r[i],r[i]置为空。

例如:数组[3,7,2,9,3,1,0,6] 的分组排序过程:

[(3)    7       2       9       3       1       0       6]

[*       7       2       9       3       1      0       6]

[0       7       2       9       3       1       *       6]

[0       7       2       9       3       1       *       6]

[0       *       2       9       3       1       7       6]

[0       *       2       9       3       1       7       6]

[0       1       2       9       3       *       7       6]

[0       1       2       9       3       *       7       6]

[0       1       2       *       3       9       7       6]

[0       1       2       *       3       9       7       6]

[0       1       2]      [3]    [3      9       7       6](一趟排序完成)

 

//快速分组
int quickClassify(int test[], int left, int right)
{
    int i = left;
    int j = right;
    int x = test[left];
    while(i < j)
    {
        while(test[j] >= x && i < j)
            j--;
        test[i] = test[j];
        if(i >= j)  break;
        i++;
        while(test[i] <= x && i < j)
            i++;
        test[j] = test[i];
        if(i>=j)  break;
        j--;
    }
    test[i] = x;
    return i;
}
//快速排序
void quickSort(int test[], int left, int right)
{
    if(left < right){
        int n = quickClassify(test, left, right);
        quickSort(test, left, n-1);
        quickSort(test, n+1, right);
    }
}

 快速排序的最好情况是每趟将序列分成两半,正好在表中间,时间复杂度O(nlogn);快速排序最坏的情况是已经排好序,时间复杂度O(n^2)。快速排序是不稳定的排序。

 

7. 堆排序。

在了解排序原理之前,需要了解“堆”数据结构;

一颗二叉树,如果每个非叶子节点都大(小)于它的所有子节点,那么这颗树就是大(小)根堆;通过构建大根堆和小根堆可以求出序列的最大值或最小值。

堆结构的应用实例:优先队列(PriorityQueue)

堆数据结构进行调整的两个操作:上浮(siftup)和下沉(siftdown)。

 

排序原理:将序列看成是一颗二叉树。构建大根堆,求出序列的最大值,与序列尾部元素交换位置;再求出剩下元素的最大值。重复以上步骤,直到得到一个从小到大的序列。

例如:数组[3,7,2,9,3,1,0,6] 的分组排序过程:

将序列看成是一棵二叉树,整个排序分为两个部分:新建堆,将最大元与最后元素转换后的重建堆。

程序如下:

#include <stdio.h>
void siftdown(int test[], int k, int m)     // 下沉操作
//假设test[k..m]是以r[k]为根的完全二叉树
{
    int temp = test[k];
    int x = test[k];    //保存当前调整的值
    int i = k;         // 当前节点
    int j = 2 * i;     // 子节点
    int finished = 0;
    while(j <= m && !finished){
        if(j < m && test[j] < test[j+1])
            j++;     // 从左孩子切换到右孩子
        if(x >= test[j])
            finished = 1;
        else{
            test[i] = test[j];   //向下移,更新i和j
            i = j;
            j = 2 * i;
        }
    }
    test[i] = temp;
}

void create_heap(int test[],int length)   // 建初堆
{
    for(int i = length / 2 - 1; i >= 0; i--){  // 从第一个非叶子节点开始,进行下沉操作 
        siftdown(test, i, length - 1);
    }
}

/*
* 堆排序的三个步骤:
*   1. 建初堆
*   2. 将堆顶元素(最大值)与最后一个元素进行交换
*   3. 堆调整
*/
void heapSort(int test[], int length)
{
    create_heap(test, length);
    for(int i = length - 1; i >= 1; i--){
        int temp = test[0];
        test[0] = test[i];
        test[i] = temp;
        siftdown(test, 0, i-1);
    }
}

 

堆排序时间复杂度在最好和最坏的情况下都是 ;堆排序是不稳定的排序。

 

 

 


  

 

 

 

 

 

【算法基础】基础算法之排序 显然法二相较于法一更优,下面根据例题来进行法二的代码实现: 快排题目代码人工动态展示过程:RPReplay_Final1674209649(1) 快排的注意点 2.归并排序 步骤 思路方法 题目:归并排序 归并模板 阅读详情

相关推荐

算法基础--排序

ps:以前没有做过ACM,在算法这一块吃了很大的亏,尤其是在今年的春招中所以痛定思痛,好好恶补一下算法的知识。 今天写算法的基础,排序算法。 冒泡排序:每次把最大的数移到最后一个 public static void bubbleSort(int[] arr) { if (arr == null || arr.length < 2) { return; } for ...

weixin_40657079的博客 268

算法基础之排序算法

文章脉络          算法    什么是算法?     算法是解题方案的准确而完整的描述,是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。 排序算法就是对排序的一种解决方案;而查找算法就是对查找的解决方案。    算法用来干什么?     提高计算机速度并节省存储空间一直成为编程人员努力的方向,排序操作成为程序设计人员考虑的因素之一,排序方法选择得当

李达 2076

手把手教你配置UEFI Secure Boot:从密钥生成到系统验证(附避坑指南)

本文详细介绍了如何配置UEFI Secure Boot,从密钥生成到系统验证的全过程,包括PK、KEK等关键密钥的生成方法,以及常见问题的解决方案。通过实战案例和避坑指南,帮助用户有效提升系统启动安全性,防止恶意软件植入。

weixin_30776273的博客 340

排序算法(6种基础排序算法)

1、冒泡排序 (1)(1)(1) 算法原理 冒泡排序在所有排序算法中,属于比较基础的一种。它的原理就是通过遍历待排序元素列,依次比较相邻元素,按照一定的规则调整它们的顺序(如何复合规则,则继续遍历),直至排序完毕。 一般来说,这个算法都是用来针对数组排序,而且往往最终结果都是非降序排列的,因此狭义地来说,冒泡排序可以归纳为: a. 比较相邻元素,若前者大于后者,则进行交换; b. 对每一组相邻元素...

weixin_44650011的博客 1851

家长必看!用RouterOS轻松屏蔽不良网站,保护孩子上网安全

本文为家长提供了一份详细的RouterOS路由器配置指南,旨在通过技术手段保护儿童上网安全。文章核心介绍了如何利用RouterOS的DNS静态条目功能,轻松实现禁止访问特定不良网站,并结合防火墙时间规则,为孩子构建一个纯净、可控的家庭网络环境,操作简单,无需专业背景。

weixin_28363123的博客 1266

Excel中如何快速地将成绩按比例来划分为等级?

问题介绍: 记录说明:班级里共有40个人,按最终总平均成绩从高到低划分等级,A等级30%,B等级50%,C等级20%。 部分成绩如下表所示: Excel中相关函数介绍: IF函数 IF函数有三个参数,语法如下: =IF(条件判断, 结果为真返回值, 结果为假返回值) 第一参数是条件判断,比如说“A1=">37”这种,判断TRUE或FALSE。如果判断是TRUE(结果为真)那么IF函数返回值是第二参数,否则(结果为假)返回第三参数。 如果省略了第三参数,则当结果为假时,会返回FALSE。 如果公式

Wendy的博客 1万+

基础排序算法

基础排序算法指的是算法时间复杂度为O(n^2 )的排序算法,比如,冒泡排序,选择排序,插入排序。这里主要介绍选择排序和插入排序的算法思想以及优化方法,并给出相应的java代码。这里介绍的排序算法默认都是按照从小到大的顺序进行排序。 选择排序 这里先给出一个例子 5 7 4 6 8 1 0 9 2 从数组里选出最小的元素放在数组首部,这里最小元素为0,所以将0与5交换,从剩下的元素中选择最小...

myw_katrina的博客 216

特斯拉Model 3 BMS主控板拆解:从硬件设计到热管理策略的实战解析

本文深度拆解特斯拉Model 3的BMS主控板,解析其硬件架构与热管理协同策略。文章聚焦于主控板的分区布局、双核MCU的智慧分工,以及从被动监控到主动干预的热管理范式转变,揭示了特斯拉在高压安全、实时控制与系统级工程思维上的设计哲学。

zz67890的博客 593

算法基础及常用算法排序

算法基础及常用算法排序什么是算法算法的度量冒泡排序未完待续... 什么是算法 算法是解决某种问题的具体策略 算法的特点: 1、算法必须有穷、确定、且可行 2、算法一般具有输入、输出 算法的度量 算法好坏的标准:时间和空间 空间复杂度:指需要占用的内存大小 时间复杂度:指需要的CPU资源和时间 效率:O(1) > O(log n) > O(n) > O(n * log n...

qq_40399026的博客 228

MPC-CBF 控制原理详解

假设系统满足如下离散时间动力学模型xt1fxtutxt∈Xut∈Uxt1​fxt​ut​xt​∈Xut​∈Uxtx_txt​:状态变量,定义域为可行状态集X⊆RnX⊆Rnutu_tut​:控制输入,定义域为控制约束集U⊆RmU⊆Rm系统需满足安全约束,由如下控制障碍函数(CBF)hX→RhX→RCx∈X∣hx≥0C:=x∈X∣hx≥。

m0_54691290的博客 1179

2025华为od面试手撕代码【求字符串表达式结果】

2025华为od面试手撕代码【求字符串表达式结果】

MISAYAONE的博客 1351

排序算法解析:从基础到高级

排序算法是将一组数据按照特定的顺序重新排列的算法。它们可以根据不同的性能指标进行分类,如时间复杂度、空间复杂度和稳定性。

无远弗届 1055

Ghost卷积原理与构建YOLOv11的GhostNet变体

本文探讨了在边缘设备部署YOLOv11时使用Ghost卷积进行模型轻量化的实践经验。针对Jetson Nano的4GB内存限制,作者通过替换Backbone中的3x3标准卷积为Ghost卷积,实现了参数减少28%、推理速度提升38%,仅损失1.1%mAP的优化效果。文章详细介绍了Ghost卷积的实现原理、在YOLOv11中的具体替换策略,以及训练调参和部署优化的关键技巧。作者强调轻量化是计算效率与模型性能的权衡,建议工程团队保留原模型和Ghost变体两个版本,根据实际需求灵活切换。Ghost卷积的核心价值在

as1225120794的博客 169

基础算法——排序【一】

排序可以说时最基础的算法之一,排序就是将数据按照某种逻辑重新排列的过程,比如从大到小排序、从小到大排序;排序非常常见比如有购物车物品的排序、历史订单的排序等等;算法我们比较关心的主要有两点:时间复杂度与空间复杂度,排序算法一样;这篇文章只介绍几种基本的排序算法:冒泡排序、插入排序、选择排序; 选择排序   算法逻辑上分为已排序未排序两个区间,从当前列表中选择最小的元素与当前列表第一个元素交换位置,...

weixin_30652271的博客 87

基于CNN-LSTM融合模型的环卫车动态称重算法研究:从频率感知到精准质量估计

摘要: 针对环卫车辆动态称重需求,本研究提出一种基于CNN-LSTM融合网络的频率分析方法。通过在实验室构建振动频率采集系统,获取不同载重下的结构响应数据,经MATLAB进行信号处理和特征提取后,建立频率-质量的非线性映射模型。实验表明,该算法在静态和模拟动态场景下平均绝对误差小于1.5%,显著优于传统方法,为环卫车智能化管理提供了高精度实时称重方案。 关键词: 动态称重;深度学习;频率分析;CNN-LSTM;MATLAB。

AI的内部世界的博客 374

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

排序算法(基础)大全

总之,排序算法能够对数据进行有序排列,提高数据的组织性和可读性,提高查找和统计等操作的效率,是计算机科学和实际应用中的基础算法之一。在有序的数据中,可以使用更加高效的查找算法,如二分查找、插值查找等,减少了查找的时间复杂度。例如,在合并两个有序的数组时,可以使用归并排序算法。其中k是最大数的位数,n是待排序数据的个数。排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。缩小增量,重复第2步的操作,直到增量为1,即进行。原数组:[5,4,2,7,1,6,8,3]

qq_74143684的博客 1198

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

十大排序基础排序算法总结 与 速度对比

1、十大排序基础排序算法总结 与速度对比 —— 耗时测试 测试环境:CPU: i5-3210M 2.5GHz 2.5GHz; 内存:4G; Win10 64位系统; VS 2015 release模式 32位。 测试数据均为 int 类型: 取值规则为:(rand() % (N)) * 3 - ra...

带熊超人 的博客 5027

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

排序算法与技术——基础排序算法

迭代方式:两种算法都通过多次遍历数组,比较并交换相邻元素。自适应优化:引入交换标志,支持对有序或近有序输入的提前终止。双向遍历:鸡尾酒排序通过正反方向交替减少趟数。时间复杂度:最坏及平均情况均为 O(n²),限制扩展能力。空间复杂度:原地排序,空间复杂度为 O(1)。教学用途:以清晰简单著称,适合作为教学示例。冒泡排序和鸡尾酒排序提供了理解算法简洁性与效率权衡的实用基础,阐释了为何复杂计算需求催生更先进的排序技术。

dcp666的博客 673

c++的基础排序算法

本章主要讲述c++的各种基础排序:快速排序、归并排序、插入排序、冒泡排序、选择排序

m0_75107602的博客 1581

基础算法模板——排序

基础算法模板——排序 1. 快速排序 void quick_sort(int q[], int l, int r){ if(l >= r) return ; int i = l - 1, j = r + 1, x = q[l + r >> 1]; while(i < j){ do i++; while(q[i] &lt...

qq_40028201的博客 233

C++实现超全的基础排序算法都在这里啦|十大基础排序

插入排序 基本思想: 每步将一个待排序的对象,按其关键码大小,插入到前面已经排好序的一组对象的适当位置上,直到对象全部插入位置。 基本操作:有序插入 在有序序列中插入一个元素,保持序列有序,有序长度不断增加。 起初,a[0]是长度为1的子序列。然后,逐一将a[1]至a[n-1]插入到有序子序列中。 在插入a[1]前,数组a的前半段(a[0] ~ a[i-1])是有序段,后半段是a[i] ~ a[...

diviner_s的博客 2262
下一篇: linux命令awk
classify233
博客等级 码龄10年 3粉丝 13原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值