用Python实现十大经典排序算法(附动图)

排队论 | Python实现排队论 阅读详情

排序算法是《数据结构与算法》中最基本的算法之一。

在这里插入图片描述

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:

关于时间复杂度

  1. 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。

  2. 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序和归并排序;

  3. O(n1+§)) 排序,§ 是介于 0 和 1 之间的常数。希尔排序

  4. 线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。

关于稳定性

  • 排序后 2 个相等键值的顺序和排序之前它们的顺序相同

  • 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。

  • 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。

名词解释

  • n:数据规模

  • k:“桶”的个数

  • In-place:占用常数内存,不占用额外内存

  • Out-place:占用额外内存

1、冒泡排序

冒泡排序(Bubble Sort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。冒泡排序还有一种优化算法,就是立一个 flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。

(1)算法步骤

  1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

  2. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。

  3. 针对所有的元素重复以上的步骤,除了最后一个。

  4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

(2)动图演示

在这里插入图片描述

(3)Python 代码

def bubbleSort(arr):  
    for i in range(1, len(arr)):  
        for j in range(0, len(arr)-i):  
            if arr[j] > arr[j+1]:  
                arr[j], arr[j + 1] = arr[j + 1], arr[j]  
    return arr  

2、选择排序

选择排序是一种简单直观的排序算法,无论什么数据进去都是 O(n²) 的时间复杂度。所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。

(1)算法步骤

  1. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置

  2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。

  3. 重复第二步,直到所有元素均排序完毕。

(2)动图演示

(3)Python 代码

def selectionSort(arr):  
    for i in range(len(arr) - 1):  
        # 记录最小数的索引  
        minIndex = i  
        for j in range(i + 1, len(arr)):  
            if arr[j] < arr[minIndex]:  
                minIndex = j  
        # i 不是最小数时,将 i 和最小数进行交换  
        if i != minIndex:  
            arr[i], arr[minIndex] = arr[minIndex], arr[i]  
    return arr  

3、插入排序

插入排序的代码实现虽然没有冒泡排序和选择排序那么简单粗暴,但它的原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。

插入排序和冒泡排序一样,也有一种优化算法,叫做拆半插入。

(1)算法步骤

  1. 将第一待排序序列第一个元素看做一个有序序列,把第二个元素到最后一个元素当成是未排序序列。

  2. 从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置。(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)

(2)动图演示

(3)Python 代码

def insertionSort(arr):  
    for i in range(len(arr)):  
        preIndex = i-1  
        current = arr[i]  
        while preIndex >= 0 and arr[preIndex] > current:  
            arr[preIndex+1] = arr[preIndex]  
            preIndex-=1  
        arr[preIndex+1] = current  
    return arr  

4、希尔排序

希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。

希尔排序是基于插入排序的以下两点性质而提出改进方法的:

  • 插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;

  • 但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;

希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序”时,再对全体记录进行依次直接插入排序。

(1)算法步骤

  1. 选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

  2. 按增量序列个数 k,对序列进行 k 趟排序;

  3. 每趟排序,根据对应的增量 ti,将待排序列分割成若干长度为 m 的子序列,分别对各子表进行直接插入排序。仅增量因子为 1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。

(2)Python 代码

def shellSort(arr):  
    import math  
    gap=1  
    while(gap < len(arr)/3):  
        gap = gap*3+1  
    while gap > 0:  
        for i in range(gap,len(arr)):  
            temp = arr[i]  
            j = i-gap  
            while j >=0 and arr[j] > temp:  
                arr[j+gap]=arr[j]  
                j-=gap  
            arr[j+gap] = temp  
        gap = math.floor(gap/3)  
    return arr  

5、归并排序

归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。

作为一种典型的分而治之思想的算法应用,归并排序的实现由两种方法:

  • 自上而下的递归(所有递归的方法都可以用迭代重写,所以就有了第 2 种方法);

  • 自下而上的迭代;

和选择排序一样,归并排序的性能不受输入数据的影响,但表现比选择排序好的多,因为始终都是 O(nlogn) 的时间复杂度。代价是需要额外的内存空间。

(1)算法步骤

  1. 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列;

  2. 设定两个指针,最初位置分别为两个已经排序序列的起始位置;

  3. 比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置;

  4. 重复步骤 3 直到某一指针达到序列尾;

  5. 将另一序列剩下的所有元素直接复制到合并序列尾。

(2)动图演示

(3)Python 代码

def mergeSort(arr):  
    import math  
    if(len(arr)<2):  
        return arr  
    middle = math.floor(len(arr)/2)  
    left, right = arr[0:middle], arr[middle:]  
    return merge(mergeSort(left), mergeSort(right))  
  
def merge(left,right):  
    result = []  
    while left and right:  
        if left[0] <= right[0]:  
            result.append(left.pop(0));  
        else:  
            result.append(right.pop(0));  
    while left:  
        result.append(left.pop(0));  
    while right:  
        result.append(right.pop(0));  
    return result  

6、快速排序

快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序 n 个项目要 Ο(nlogn) 次比较。在最坏状况下则需要 Ο(n2) 次比较,但这种状况并不常见。事实上,快速排序通常明显比其他 Ο(nlogn) 算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。

快速排序使用分治法(Divide and conquer)策略来把一个串行(list)分为两个子串行(sub-lists)。

快速排序又是一种分而治之思想在排序算法上的典型应用。本质上来看,快速排序应该算是在冒泡排序基础上的递归分治法。

快速排序的名字起的是简单粗暴,因为一听到这个名字你就知道它存在的意义,就是快,而且效率高!它是处理大数据最快的排序算法之一了。虽然 Worst Case 的时间复杂度达到了 O(n²),但是人家就是优秀,在大多数情况下都比平均时间复杂度为 O(n logn) 的排序算法表现要更好,可是这是为什么呢,我也不知道。好在我的强迫症又犯了,查了 N 多资料终于在《算法艺术与信息学竞赛》上找到了满意的答案:

快速排序的最坏运行情况是 O(n²),比如说顺序数列的快排。但它的平摊期望时间是 O(nlogn),且 O(nlogn) 记号中隐含的常数因子很小,比复杂度稳定等于 O(nlogn) 的归并排序要小很多。所以,对绝大多数顺序性较弱的随机数列而言,快速排序总是优于归并排序。

(1)算法步骤

① 从数列中挑出一个元素,称为 “基准”(pivot);

② 重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;

③ 递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序;

递归的最底部情形,是数列的大小是零或一,也就是永远都已经被排序好了。虽然一直递归下去,但是这个算法总会退出,因为在每次的迭代(iteration)中,它至少会把一个元素摆到它最后的位置去。

(2)动图演示

(3)Python 代码

def quickSort(arr, left=None, right=None):  
    left = 0 if not isinstance(left,(int, float)) else left  
    right = len(arr)-1 if not isinstance(right,(int, float)) else right  
    if left < right:  
        partitionIndex = partition(arr, left, right)  
        quickSort(arr, left, partitionIndex-1)  
        quickSort(arr, partitionIndex+1, right)  
    return arr  
  
def partition(arr, left, right):  
    pivot = left  
    index = pivot+1  
    i = index  
    while  i <= right:  
        if arr[i] < arr[pivot]:  
            swap(arr, i, index)  
            index+=1  
        i+=1  
    swap(arr,pivot,index-1)  
    return index-1  
  
def swap(arr, i, j):  
    arr[i], arr[j] = arr[j], arr[i]  

7、堆排序

堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆排序可以说是一种利用堆的概念来排序的选择排序。分为两种方法:

  1. 大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列;

  2. 小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列;

堆排序的平均时间复杂度为 Ο(nlogn)。

(1)算法步骤

  1. 创建一个堆 H[0……n-1];

  2. 把堆首(最大值)和堆尾互换;

  3. 把堆的尺寸缩小 1,并调用 shift_down(0),目的是把新的数组顶端数据调整到相应位置;

  4. 重复步骤 2,直到堆的尺寸为 1。

(2)动图演示

(3)Python 代码

def buildMaxHeap(arr):  
    import math  
    for i in range(math.floor(len(arr)/2),-1,-1):  
        heapify(arr,i)  
  
def heapify(arr, i):  
    left = 2*i+1  
    right = 2*i+2  
    largest = i  
    if left < arrLen and arr[left] > arr[largest]:  
        largest = left  
    if right < arrLen and arr[right] > arr[largest]:  
        largest = right  
  
    if largest != i:  
        swap(arr, i, largest)  
        heapify(arr, largest)  
  
def swap(arr, i, j):  
    arr[i], arr[j] = arr[j], arr[i]  
  
def heapSort(arr):  
    global arrLen  
    arrLen = len(arr)  
    buildMaxHeap(arr)  
    for i in range(len(arr)-1,0,-1):  
        swap(arr,0,i)  
        arrLen -=1  
        heapify(arr, 0)  
    return arr  

8、计数排序

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

(1)动图演示

(2)Python 代码

def countingSort(arr, maxValue):  
    bucketLen = maxValue+1  
    bucket = [0]*bucketLen  
    sortedIndex =0  
    arrLen = len(arr)  
    for i in range(arrLen):  
        if not bucket[arr[i]]:  
            bucket[arr[i]]=0  
        bucket[arr[i]]+=1  
    for j in range(bucketLen):  
        while bucket[j]>0:  
            arr[sortedIndex] = j  
            sortedIndex+=1  
            bucket[j]-=1  
    return arr  

9、桶排序

桶排序是计数排序的升级版。它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定。为了使桶排序更加高效,我们需要做到这两点:

  1. 在额外空间充足的情况下,尽量增大桶的数量

  2. 使用的映射函数能够将输入的 N 个数据均匀的分配到 K 个桶中

同时,对于桶中元素的排序,选择何种比较排序算法对于性能的影响至关重要。

什么时候最快

当输入的数据可以均匀的分配到每一个桶中。

什么时候最慢

当输入的数据被分配到了同一个桶中。

Python 代码

def bucket_sort(s):  
    """桶排序"""  
    min_num = min(s)  
    max_num = max(s)  
    # 桶的大小  
    bucket_range = (max_num-min_num) / len(s)  
    # 桶数组  
    count_list = [ [] for i in range(len(s) + 1)]  
    # 向桶数组填数  
    for i in s:  
        count_list[int((i-min_num)//bucket_range)].append(i)  
    s.clear()  
    # 回填,这里桶内部排序直接调用了sorted  
    for i in count_list:  
        for j in sorted(i):  
            s.append(j)  
  
if __name__ == __main__ :  
    a = [3.2,6,8,4,2,6,7,3]  
    bucket_sort(a)  
    print(a) # [2, 3, 3.2, 4, 6, 6, 7, 8]  

10、基数排序

基数排序是一种非比较型整数排序算法,其原理是将整数按位数切割成不同的数字,然后按每个位数分别比较。由于整数也可以表达字符串(比如名字或日期)和特定格式的浮点数,所以基数排序也不是只能使用于整数。

基数排序 vs 计数排序 vs 桶排序

基数排序有两种方法:

这三种排序算法都利用了桶的概念,但对桶的使用方法上有明显差异:

  • 基数排序:根据键值的每位数字来分配桶;

  • 计数排序:每个桶只存储单一键值;

  • 桶排序:每个桶存储一定范围的数值;

动图演示

Python 代码

def RadixSort(list):  
    i = 0                                    #初始为个位排序  
    n = 1                                     #最小的位数置为1(包含0)  
    max_num = max(list) #得到带排序数组中最大数  
    while max_num > 10**n: #得到最大数是几位数  
        n += 1  
    while i < n:  
        bucket = {} #用字典构建桶  
        for x in range(10):  
            bucket.setdefault(x, []) #将每个桶置空  
        for x in list: #对每一位进行排序  
            radix =int((x / (10**i)) % 10) #得到每位的基数  
            bucket[radix].append(x) #将对应的数组元素加入到相 #应位基数的桶中  
        j = 0  
        for k in range(10):  
            if len(bucket[k]) != 0: #若桶不为空  
                for y in bucket[k]: #将该桶中每个元素  
                    list[j] = y #放回到数组中  
                    j += 1  
        i += 1  
return  list

关于Python学习指南

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后给大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

包括:Python激活码+安装包、Python web开发,Python爬虫,Python数据分析,人工智能、自动化办公等学习教程。带你从零基础系统性的学好Python!

👉Python所有方向的学习路线👈

Python所有方向路线就是把Python常用的技术点做整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(全套教程文末领取)

在这里插入图片描述

👉Python学习视频600合集👈

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

温馨提示:篇幅有限,已打包文件夹,获取方式在:文末

👉Python70个实战练手案例&源码👈

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉Python大厂面试资料👈

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

👉Python副业兼职路线&方法👈

学好 Python 不论是就业还是做副业赚钱都不错,但要学会兼职接单还是要有一个学习规划。

在这里插入图片描述

👉 这份完整版的Python全套学习资料已经上传,朋友们如果需要可以扫描下方优快云官方认证二维码或者点击链接免费领取【保证100%免费】

点击免费领取《优快云大礼包》:Python入门到进阶资料 & 实战源码 & 兼职接单方法 安全链接免费领取

排队论 | Python实现MMC排队论 阅读详情

相关推荐

AgeQueueing:在Python上实现的排队模拟器

年龄排队 在Python上实现的排队模拟器。 它以蒙特卡洛方式评估不同调度策略下的排队性能指标,包括信息年龄(AoI)。 该项目包括: 类,包括各种排队操作,例如到达,等待,服务和离开。 :运行此文件,包括设置排队参数,进行不同的模拟,保存数据和绘制曲线。 所需的包 Python 3. * 麻木 大熊猫 matplotlib 它能做什么 评估绩效指标: 间隔:到达间隔,出发间隔 延迟:等待时间,队列长度 信息年龄:平均年龄,高峰年龄,有效离职率 调度策略基于 FCFS或LCFS 抢占式或非抢占式 优先或非优先:优先顺序不同的到达 是否基于大小:SRPT(最短剩余处理时间) 是否基于年龄:SEA(最短年龄)目前不可用 调度策略支持: FCFS FCFSPriority :FCFS +优先级 FCFSSRPT :FCFS + SRPT FCFSSEA :FCFS + SE

chatgpt赋能python:Python代码怎么自动排序?全面解析!

本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。🧡AI职场汇报智能办公文案写作效率提升教程 🧡专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。

qq_45562973的博客 652

Python实现航道排队

用python实现航道排队。

python实现常见的排序算法

# coding: utf-8 """常见排序算法正序实现""" def bubble_sort(arr): """ 冒泡排序:稳定排序,最差和平均时间复杂度O(n^2),最优情况是O(n),即原数组是已排好序的情况,空间复杂度O(1),即交换操作时使用的临时空间 实现:比较相邻元素,将较小的放在前面,重复执行,直到所有元素满足正序。 """ n = len(arr) for i in range(0, n): # 表示排序的轮次 is.

缘来如此 8786

排队论算法 (含ppt)

有讲得很详细的课件 想学习的就来下载吧 具体程序如果需要的话 可以给我留言哦

OpenRA引擎实战:如何从零开始搭建一个经典RTS游戏模组(附资源包)

本文详细介绍了如何利用开源游戏引擎OpenRA从零开始搭建经典RTS游戏模组。内容涵盖开发环境配置、资源管线处理、YAML规则定义、地图编辑与Lua脚本编写等全流程实战指南,并提供了资源包,帮助开发者和爱好者快速创建属于自己的即时战略游戏世界。

silver的专栏 904

Python自定义排序详解

如果以创建的对象作为列表中的元素,那么对列表进行排序时可使用sort() 函数或 sorted() 函数 , 但要注意的是 : ①当排序对象为列表的时候两者适合的场景不同② sorted() 函数会返回一个排序后的列表,原有列表保持不变③sort() 函数会直接修改原有列表,永久改变,无法返回,函数返回为 None ④如果实际应用过程中需要保留原有列表,使用 sorted() 函数较为适合,否则可以选择sort() 函数,因为sort() 函数不需要复制原有列表,消耗的内存较少,效率也较高。

qq_51774501的博客 6561

3DGS实战笔记:从相机坐标系到屏幕像素,手把手推导高斯椭球的投影变换矩阵

本文详细解析了3D高斯散射(3DGS)技术中从相机坐标系到屏幕像素的几何变换过程,重点推导了高斯椭球的投影变换矩阵。通过视图变换、投影变换和视口变换的完整流程,结合雅可比矩阵处理协方差矩阵,实现了高效的三维重建与渲染。文章提供了Python代码示例,帮助开发者深入理解3DGS的核心几何变换机制。

weixin_28691741的博客 438

用python实现十大经典排序算法(附动图)

排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。

csdn1561168266的博客 1632

别再只跑Demo了!用MovieLens数据集完整复现一个电影推荐系统(Python/Pandas实战)

本文详细介绍了如何利用MovieLens数据集从零构建一个完整的电影推荐系统,涵盖数据清洗、特征工程、推荐算法实现(协同过滤和矩阵分解)以及Web服务部署的全流程。通过Python和Pandas实战,读者可以掌握推荐系统的核心技术和生产环境部署技巧,不再局限于简单的Demo运行。

weixin_29062865的博客 150

C#---第十一课:对列表的各种操作,添加、删除、排序、列表长度、获取元素的索引、FirstOrDefault()、SingleOrDefault()、last()

1.添加元素 2.删除元素 (1)删除列表中指定的元素 (2)删除列表A中所有与列表B相交的元素---常规 (3)删除列表A中所有与列表B相交的元素---lambda 3.排序(正序、倒序) 4.获取列表的最大容量(长度)、已用容量 6.获取元素在列表中的位置(index) 7.判断某元素是否在列表List中 8.获取列表中第一个元素First() & FirstOrDefault() 9.获取列表中唯一元素Single() & SingleOrDefault() 10.获取列表中最后一个元素

Alien-Hu 3627

十大经典排序算法Python版实现(附动图演示)

点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达 本文转自:机器学习算法那些事排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序...

小白学视觉 623

封装POD与PinMap文件总结学习-20250516

芯片封装外形图(POD)和PinMap是芯片设计和制造中的关键文档。POD详细描述了芯片的物理尺寸、引脚布局和封装类型,而PinMap则提供了芯片封装上各个引脚的位置、名称和功能的详细信息。这些文档在芯片设计、制造和应用过程中起到“地图”的作用,帮助设计人员理解芯片的物理和电气特性。在PCB设计中,POD用于确定socket的footprint和pogo的选型,而PinMap则用于器件的合理布局和布线。这些信息对于确保芯片的正确安装和功能至关重要。

歌颂苦难的行为是无耻的; 2370
上一篇: 编程路上的拦路石:揭秘学编程失败的人都有哪些特征
下一篇: Python 中 4 个高效的技巧(建议收藏)
网络安全_入门教程
博客等级 码龄4年 1万+粉丝 2151原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值