排序算法——快速排序2

❤️全面图解快速排序,详细图文并茂解析!❤️ 写在前面: 大家好,我是时光。 今天给大家带来的是排序算法中的快速排序。 我采用图解方式讲解,争取写透彻。话不多说,开始! 思维导图: 1,快速排序概念 通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。主要采用分治法和挖坑填数等方法,分治法就是大问题分解成各个小问题,堆小问题求解,使得大问题得以解决。 2,算法思路 我们先搞清楚这个堆排序思想,先把逻辑搞清楚,不着急写代码。 我们首先有一个无序数组,比方说 阅读详情

一、基本原理

选择第一个数作为基准数,通过一趟遍历将比他小的数放在他左边,比他大的数放在他的右边。

  • 选择第一个数做为基准数p;
  • 从数列最后一个开始遍历,找出第一个比基准数小的数,索引为j,从数列第二个开始遍历,找出第一个比基准数大的数,索引为i;交换a[i]和a[j]的值;
  • 重复上面步骤直到i >= j,将a[i]和基准数交换位置,这样基准数就调整到数列中间;
  • 对“基准数左侧数列”和"基准数右侧数列"执行以上操作。

二、算法分析

以数组{6, 3, 8, 2, 9, 1}为例:
第一轮left = 0, right = 5,i = left+1, j = right,基准数p=6

  • j=5:比较1和6,1<6,结束遍历j,取j=5;
  • i=1:比较3和6,3<6,继续遍历i;
  • i=2:比较8和6,8>6, 结束遍历i,取i=2;
  • 调整a[i]和a[j]的值,数组为:6,3,1,2,9,8
  • j=4:比较9和6,9>6,继续遍历j;
  • j=3:比较2和6,2<6,结束遍历j,取j=3;
    -由于不满足i<j,退出本轮遍历;
    交换a[0]和a[i=3]的值,数组为:2,3,1,6,9,8

第二轮left = 0, right = 2,i = left+1, j = right,基准数p=2
  • j=2:比较1和2,1<2,结束遍历j,取j=2;
  • j=1:比较3和2,3>2,结束遍历i,取i=1;
  • 调整a[i]和a[j]的值,数组为:2,1,3,6,9,8
  • j=1:比较1和2,1<2,结束遍历j,取j=1;
  • 由于不满i<j,退出本轮遍历
    交换a[0]和a[i=1]的值,数组为:1,2,3,6,9,8

第三轮left = 0, right = 0,此轮无效,退出本轮
第四轮left = 2, right = 2,此轮无效,退出本轮

第五轮left = 4, right = 5,i = left+1, j = right,基准数p=9
由于不满足i<j,退出本轮遍历,
交换a[4]和a[i=5]的值,数组为:2,3,1,6,8,9


如需查看元素交换动态图,请移步:Comparison Sorting Algorithms

三、算法实现

static void sort(int left, int right) {
		if (left >= right) {
			return;
		}
		int p = arr[left];
		int i = left + 1;
		int j = right;
		while (i < j) {
			for (; j > i && arr[j] > p; j--) {
			}
			for (; j > i && arr[i] < p; i++) {
			}
			if (j > i) {
				int tmp = arr[j];
				arr[j] = arr[i];
				arr[i] = tmp;
				System.out.println(Arrays.toString(arr));
			}
		}
		arr[left] = arr[i]; 
		arr[i] = p;
		System.out.println(Arrays.toString(arr));
		sort(left, i - 1);
		sort(j + 1, right);
	}

四、参考链接

  1. Comparison Sorting Algorithms
排序算法习题2之快速排序 对给定关键字序号j(1<j<n),要求在无序记录A[1…n]中找到关键字从小到大排在第j位上的记录,写一个算法利用快速排序的划分思想实现上述查找(要求用最少的时间和最少的空间) /*利用快速排序的划分思想在无序记录中查找给定关键字序号的记录*/ #include <stdio.h> #include <stdlib.h> #include <limits.... 阅读详情

相关推荐

2.2.4 蓝桥杯排序算法之快速排序

快速排序是一种非常高效的排序算法,特别适用于大数据量的排序。虽然在最坏情况下其时间复杂度会退化为O(n2),但通过一些策略,如随机选择轴值,可以有效避免这种情况,保持良好的平均性能。掌握快速排序不仅可以提高解决问题的效率,也是深入理解分治策略和递归思想的基础。希望本篇博客能帮助你理解并能够在蓝桥杯等算法竞赛中有效应用快速排序。

tang7mj的博客 543

快速排序的比较规则

备注:每一趟,都是一个数为 基准,这个数是随意的,但是注意的是, 下一趟的时候,就不用比较他的位置了,只需比较基数的前后位置,我这边没有后面,比较特殊。 比较规则,每次比较都是从最后一个数跟基数比较,除去上一个基数。如果后一个数比当前基数大,则位置不动,如果后面的基数比当前基数小,则取代当前基数的位置,然后从前往后继续跟基数比较,规则跟从后往前是一样的。 例如: {9,8,7,6,5,4,3,2,...

weixin_45430292的博客 1720

CSM中一些常见问题的解决方式

CSM中一些常见问题的解决方式 抖动 摄像机在每帧移动或者旋转时,会产生较严重的抖动问题。

小龙虾的博客 2130

【算法】快速排序算法原理及实现

快速排序算法原理及实现

互联网小阿祥 3547

保姆级教程:在ROS Noetic下,手把手教你将自定义A*全局规划器打包成插件(附避坑指南)

本文提供了一份详细的ROS Noetic下自定义A*全局规划器插件开发指南,涵盖从环境准备、算法优化到插件配置与调试的全流程。通过实战案例和避坑技巧,帮助开发者高效实现机器人导航中的全局路径规划,特别适合需要优化ROS导航栈的开发者。

weixin_29168675的博客 285

【RS】哨兵系列数据下载(哨兵2号Sentinel-2波段介绍、下载)

以哨兵二号为示例,分享如何下载欧空局的哨兵系列数据

Remote Sensing迷途小书童 1万+

八大排序——快速排序

通过一趟排序将待排数组分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。 过程图如下: ①首先找到一个基准数base=6 ②先移动右边的指针j,找到第一个小于6的数也就额是5 然后移动左边指针,找到第一个大于6的也就时7 进行交换 ③先移动右边指针j,找到下一个小于6的数也就是4 然后移动左边指针i,找到下一个大于6的数,也就是9 进行交换 ④i和j一旦相遇,进停止检索,将基准数和相遇位置交换 ⑤..

qq_58595750的博客 868

泛微ecology9二次开发-附件上传接口实战:从表单创建到数据库存储解析

本文详细解析了泛微ecology9二次开发中的附件上传接口实战,从测试环境搭建、数据库表结构解析到接口代码实现,提供了全面的开发指南。重点介绍了文件上传的核心逻辑、常见问题排查及高级应用场景,帮助开发者高效实现附件上传功能并优化系统性能。

weixin_30836759的博客 477

八大排序之快速排序

一、快速排序的思想 通过一趟排序将待排记录分割成独立的两部分,其中一部分记录的关键字均比另一部分记录的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序的目的。 通俗来讲是选择一个基准点,将整个数据分别从前和从后向前比较,小数向前走,大数向后走。所以这个基准点的选择就很关键。 二、图解快速排序 待排序的关键字序列为: [15 3 2 43 46 75 12 4 235 45 7] ...

qq_43411563的博客 1831

VisionMaster脚本调试(VS)

使用VS调试VisionMaster 脚本

yu_fujiang的专栏 3294

微信小程序逆向实战:从HTTPS抓包到API接口全解构

方案原理优点缺点方案一:使用低版本微信+系统代理微信7.0以下版本未强制不走代理操作简单容易被封号,无法使用新版小程序方案二:Hook SSL层(Xposed/Frida)动态Hook Java的TrustManager或系统的SSLContext,绕过证书校验灵活可控需要Root/越狱,技术门槛高方案三:VPN转发抓包(PacketCapture)利用Android VPNService将所有流量转发到本地代理无需Root,兼容性好部分机型存在性能问题。

2201_76125261的博客 266

排序算法2——快速排序

算法原理 算法实现 ——————算法原理——————快速排序算法一种最常见的排序算法,其核心思想就是 分治 ,具体的:(1) 选定一个基准数;(2) 分区,将所有大于基准数的数据分为一区,将所有小于等于基准数的数据分为一区;(3) 递归,对上述分区重复(1)(2),直到每个分区只有一个数。 ———————————————————————————下面看一个动画来快速理解该算法是怎么工作的

shuzfan的专栏 2882

AUTOSAR从入门到精通-【自动驾驶】特斯拉全自动驾驶(FSD)

特斯拉全自动驾驶系统(Full-Self Driving,简称FSD)是特斯拉公司开发的高级驾驶辅助系统,旨在通过神经网络技术实现环境感知与车辆控制,在驾驶员监督下完成导航、转向、变道、泊车等操作。‌ 该系统自2021年发布Beta测试版以来持续迭代,最新版本为2025年10月推出的v14版本。‌FSD v14版本基于端到端神经网络架构,取代了传统代码逻辑,通过数百万视频片段训练模型,以模仿人类驾驶决策。‌ 其功能覆盖住宅区街道、城市道路及高速公路,支持交通信号识别、自动变道和环岛通行等场景。

getusushu的博客 570

php 常见排序算法2(快速排序)

例如快速排序问题,一个列表进行排序,如下图 首先选择列表中的一个元素作为基准元素,其他的元素都与这个元素做比较,找出小于这个基准值的值、大于基准值的值。这称为“分区”,这时有, 1)一个由所有小于基准值的数字组成的子数组; 2)基准值 3)一个由所有大于基准值的数组组成的子数组 然后再将“小于v”和“大于v”的数据块作为子数组,同样选择基准值,再进行上述类似操作,当执行到数据块中...

雪锋的笔记 293

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

排序算法2:直接选择排序与快速排序

前面我们进入了排序算的讲解。今天我们将继续学习几种重要的排序思想,好,咱们三连上车开始今天的内容。

2302_79964175的博客 3459

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

排序算法(2)——快速排序

快速排序是英国计算机科学家托尼・霍尔(C. A. R. Hoare)在 1960 年年提出的一种二叉树结构的交换排序方法。:任取待排序元素序列中的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值,右子序列中所有元素均大于基准值,然后最左右子序列重复该过程,直到所有元素都排列在相应位置上为止。

2302_81312180的博客 1156

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

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

2.排序算法——快速排序

问题描述:利用快速排序算法对下列实例排序,在算法执行过程中,写出数组A第一次排序后被分割的过程。                 A=(65,70,75,80,85,55,50,2)解题思想:在快速排序中,记录的比较和交换是从两端向中间进行的,关键字较大的记录一次就能交换到后面的单元,总的比较和移动次数较少。对于输入的数组a[p:r],做法为:*分解:以a[p]为基准元素将a[p: r]划分成三部...

HackQ_sxj的博客 2060

nlogn级别的排序算法(2)快速排序

nlogn级别的排序算法(2)快速排序 1. 基本思路 通过一趟排序,要将数据分成独立的两部分,其中一部分的所有数据都比另一部分中的所有数据大。为此,每次取第一个数据作为中间值,每一趟排序的目的就是使中间值位于正确的位置,所有该位置左边的数据都比中间值小,所有该位置右边的数据都比中间值大。然后以中间值为界,只要左右两边的数据量大于1,即可分别进行相同的排序操作,递归直到完成整个数组的排序。

佳佳的博客 768

排序算法2 (快速排序)

文章目录1.快速排序思想2.算法核心3.快速排序的问题及解决4.算法实现 1.快速排序思想 思想: 分而治之 伪代码: void Quicksort(ElementType A[], int N) { if (N < 2) return; pivot = 从A[]中选一个主元; 将S = {A[] \ pivot} 分成2个独立子集: A1={a属于S | a <= p...

weixin_43282440的博客 331

经典排序算法(2)——快速排序算法详解

快速排序(Quick Sort)也是一种典型的交换排序算法,通过交换数据元素的位置进行排序。 一、算法基本思想 (1)基本思想 快速排序的基本思想就是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序采用了分治

渴望,就奋力追寻... 5422

排序算法(4)之快速排序(2)

排序算法(4)之快速排序(2),快速排序的优化以及非递归实现快速排序.

wer24_25的博客 1111

常见排序算法2之快速排序

1.快速排序原理 2.快速排序框架 3.快速排序步骤 1.先将一个数排好顺序(一般是第一个数) 代码如下 def patition(li,left,right): tmp = li[left] while left < right: while left < right and li[right] >= tmp: #从右面找比tmp小的数 right -= 1 #往左走一步 li[left] = li[right

weixin_46398446的博客 219

排序算法2—归并、快速排序

4、归并排序 https://blog.youkuaiyun.com/left_la/article/details/8656953 最好、最坏、平均时间性能都为O(nlogn) 空间复杂度O(n+logn) 归并排序是一种占用内存,但效率高且稳定的算法 //归并排序 void Merge(int *a, int p, int q, int r) { //1、分配空间 int n1 = q -...

qq_33611947的博客 134

排序算法大比拼(2.2)——时间O(n log2n)篇之快速排序(左右指针法)

文章目录概述算法思路动画演示代码实现算法特点 概述 快速排序是对冒泡排序的一种改进,也是当前人们认为综合效率最好的排序算法。 下面,让我们一起来学习最基本的快速排序叭~ 建议大家先看看第一篇和第二篇。 算法思路 我们需要先找一个基准数k。在最基本的快速排序中,k可以是序列中的第一个数。 对于左指针,一个元素合法的定义是:这个数≤k。 左指针向后遍历不停地向后遍历,寻找第一个不合法的数。 3, 7, 1 ≤ 8, 10 ≥ 8。 左指针第一个不合法的数就是a[4] = 10。 对于右指针,一个元素合法

风斯在下 1545
上一篇: 排序算法——快速排序
下一篇: 排序算法——插入排序
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值