内部排序算法的比较

内部排序算法比较(超详解) 一、题目描述 通过随机数据比较各排序算法的关键字比较次数和关键字移动次数,以 及执行时间,取得直观感受。 二、设计要求一、需求分析 实现各排序算法,分别进行以下各组比较,并进行总结。 一、各算法在不同规模下的比较。 1)比较范围:直接插入排序、冒泡法排序、简单选择排序、快速排序1(自己实现)、快速排序2(调用STL)、归并排序。 2)比较指标:a)关键字操作次数(比较次数和移动次数 阅读详情

最近对内部排序进行复习,深入掌握各种排序算法的思想、排序过程和特征,对一些常用排序算法的关键代码进行比较,最终为了在工作中看到特定序列有选择最优排序算法的能力。
排序脑图

一、直接插入排序

这种排序的思想是,在待排序的数组中,设置一段排序区间让他始终保持有序并不断增大,直到覆盖整个数组,就完成了对数组的排序。

这就是最简单的直接插入排序,它的时间复杂度 是 O(N)~O(N^2)

当待排序集合本身接近有序时,它的时间复杂度最小,

当待排序集合本身时逆序集合时,它的时间复杂度最大

具体代码如下:

void DirectInsertionSort(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	for (int i = 0; i < sz - 1; i++)
	{
		if (arr[i + 1] < arr[i])
		{
		        //end之前的元素都是有序的,tmp表示这个集合接下来的一个元素
			int tmp = arr[i + 1];
			int end = i;
			//将tmp放到排序数组中合适的位置
			while (end >= 0 && arr[i] > tmp)
			{
				arr[end + 1] = arr[end];
				end--;
			}
			arr[end + 1] = tmp;
		}
	}
}

二、希尔排序

简单的说,希尔排序还是插入排序的一种

直接插入算法 比较适合用于接近顺序的数组,不适合于接近完全逆序的数组,

而希尔排序的过程,则是让数组变得越来越有序化,直到完全有序的过程

具体步骤如下:

1、指定一个间隔,gap将数组划分成若干组: (0, gap, gap+gap, …) (1, gap+1, gap+gap+1, …)

分别对每一组的最后一个元素进行单趟插入

2、不断减小gap,重复上述的步骤

3、直到gap为1时,相当于一次普通,但比较高效的的插入排序

根据这样的算法,可以得出结论:

当数组是完全逆序的情况下,希尔排序的优化程度最高

当数组是完全有序的情况下,希尔排序没有优化

时间复杂度为O(N) ~ O(N^2) 但实际上,几乎不会慢到O(N^2)的情况

具体代码如下:

void ShellSort(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	int gap = sz;
	while (gap > 1)
	{
		gap = gap / 3 + 1;
		//将数组分割成若干部分,并分别对每部分进行一趟排序
		for (int i = 0; i < sz - gap; i++)
		{
			int end = i;
			int tmp = arr[end + gap];
			while (end >= 0 && tmp < arr[end])
			{
				arr[end + gap] = arr[end];
				end -= gap;
			}
			arr[end + gap] = tmp;
		}
	}
}

三、冒泡排序

冒泡排序,每一趟都遍历一次待排序的数组,当遇到当前元素比下一个元素大的情况,则交换这两个元素

所以,其效率比直接选择排序略高

经过优化后,最快能达到 O(N)

所以其时间复杂度为 O(N) ~ O(logN)

具体代码如下:

void BubbleSort_1(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	for (int i = 0; i < sz - 1; ++i)
	{
		bool flag = true;
		for (int j = 0; j < sz - i - 1; ++j)
		{
			if (arr[j] > arr[j + 1])
			{
				std::swap(arr[j], arr[j + 1]);
				flag = false;
			}
		}
		if (flag == true)
		{
			return;
		}
	}
}

四、快速排序

快速排序的思想,举个例子说明,待排序的数组如下:

2    5    1    6    4    7    3

进行快速排序,每趟排序之后的数组分别为:

[ 2 1 ] 3 [ 6 4 7 5 ]

1    2    3    [4]    5    [7    6]

1    2    3    4    5    6    7

其中这些红色的元素,左边都是比他小的数,右边都是比它大的数。

以上就是快速排序的思想:

每次从数组中提取一个元素出来,放在合适的位置,满足该位置左边的数都小于它本身,而该位置右边的数都大于它本身。

以上是单趟排序,经过单趟排序,一个元素已经放在了合适的位置,并且以该元素的值为分界,有2个区间,再对以上两个区间进行如上的单趟排序,当两个区间都没有元素的时候,整个数组就已经有序了。

具体代码如下:

//返回中间值的索引
int GetMidIndex(int *arr, int left, int right)
{
	int mid = left + (right - left) / 2;		//2
	if (arr[left] < arr[mid])
	{
		if (arr[mid] < arr[right])
		{
			return mid;
		}
		else if (arr[left] < arr[right])
		{
			return right;
		}
		else
		{
			return left;
		}
	}
	else      //arr[left] > arr[mid]
	{
		if(arr[mid] > arr[right])
		{
			return mid;
		}
		else if (arr[left] > arr[right])
		{
			return right;
		}
		else
		{
			return left;
		}
	}
}
//单趟排序
int _PortSort(int *arr, int left, int right)
{
	assert(arr);
	//优化
	int mid = GetMidIndex(arr, left, right);
	std::swap(arr[mid], arr[right]);
	int key = arr[right];
	int begin = left;
	int end = right - 1;
	while (begin < end)
	{
		//begin找比key大的为止
		while (begin < end && arr[begin] < key)
		{
			++begin;
		}
		//end找比key小的为止
		while (begin < end && arr[end] >= key)
		{
			--end;
		}
		//找到了
		if (begin < end)
		{
			std::swap(arr[begin], arr[end]);
		}
	}
	if (arr[begin] > arr[right])
	{
		std::swap(arr[begin], arr[right]);
		return begin;
	}
	else   //这种情况下,说明本趟排序没有找到合适的位置
	{
		return right;
	}
}
void _QuickSort(int *arr, int left, int right)
{
	if (left >= right)
	{
		return;
	}
	int div = _PortSort(arr, left, right);	//单趟排序,得到中间位置
	_QuickSort(arr, left, div - 1);
	_QuickSort(arr, div + 1, right);
}
void QuickSort(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	_QuickSort(arr, 0, sz - 1);
}

快速排序的优化主要为以下两方面:

1、“三次取中”

2、为了节约压栈开销,当递归若干次,区间已经足够小时,对小区间的处理不要继续递归调用了,而是用其他排序(如插入排序)

快速排序的时间复杂度是:O(logN) ,最慢有可能达到O(N^2),不过采用“三次取中”优化的快速排序,是可以避免这种最坏情况的

五、选择排序

选择排序是很好理解的一种排序算法,但也是最慢的一种排序算法。

它的实现步骤是:

选最大的元素放到队尾,再在剩下的元素中选最大的放之前队尾的前一个位置

所以它的时间复杂度 始终是 O(N^2)
具体代码如下:

void SelectionSort_Normal(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	while (sz > 0)
	{
		int MaxIndex = 0;
		for (int i = 0; i < sz; i++)
		{
			if (arr[i] > arr[MaxIndex])
			{
				MaxIndex = i;
			}
		}
		if (MaxIndex != (sz - 1))
		{
			std::swap(arr[sz - 1], arr[MaxIndex]);
		}
		sz--;
	}
}

实现速度较慢,做一个优化每次顺便选出最小的元素放到当前的第一个位置,提高一倍的速度,从时间复杂度的角度来看,依然是 O(N^2)
具体代码如下:

/*
选择排序——直接选择排序2(每次选最大的数放到队尾,选最小的数放队首)
时间复杂都为 O(N^2 / 2) (效率翻倍)
*/
void SelectionSort_Improve(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	int front = 0;
	int end = sz - 1;
	while (front < end)
	{
		int MaxIndex = front;
		int MinIndex = front;
		for (int i = front; i <= end; ++i)
		{
			if (arr[i] > arr[MaxIndex])
			{
				MaxIndex = i;
			}
			if (arr[i] < arr[MinIndex])
			{
				MinIndex = i;
			}
		}
		int MaxVal = arr[MaxIndex];
		int MinVal = arr[MinIndex];
		if (MaxIndex != end)
		{
			std::swap(arr[MaxIndex], arr[end]);
		}
		//修正MinIndex
		if (MinIndex == end)
		{
			MinIndex = MaxIndex;
		}
		if (MinIndex != front)
		{
			int tmp = arr[front];
			arr[front] = MinVal;
			arr[MinIndex] = tmp;
		}
		++front;
		--end;
	}
}

六、堆排序

堆排序也是选择排序,上述的选择排序每次都得在剩下的元素中选择最大的元素并放在最后

而堆排序则借助堆,利用堆的特性,在选择最大元素这一步大大提高了效率

堆排序是一种很高效的算法,堆是一种数据结构,以二叉树的形式表现出来

堆又分为大堆、小堆,其根节点分别是所存放元素中最大、最小的

二叉树可以用指针的形式表示,也可以用数组下标的形式表示,这里采用下标的形式表示

排序的思路为:

(这里采用大堆的形式)

1、将所有元素放入堆中

2、这时堆顶元素就是最大的,将它与堆中最后一个元素交换,此时数组中最后一个元素就是所有元素中最大的那一个,接下来对堆顶的元素执行一次向下调整,将其放在合适的位置

(以上是一趟排序)

3、不断重复第2步,直到所有元素有序 ,

每次选出当前堆中最大的元素放在最后面,因此最终得到的是升序的数组。

堆排序效率很高,并且效率几乎不受数组本身的影响,是一种比较高效的排序算法。

其时间复杂度为 O(log2(N))
具体代码如下:

//向下调整
void AdjustDown(int *arr, int sz, int parent)
{
	int child = parent * 2 + 1;
	while (child < sz)
	{
		if (child + 1 < sz && arr[child + 1] > arr[child])
		{
			++child;
		}
		if (arr[child] > arr[parent])
		{
			std::swap(arr[child], arr[parent]);
			parent = child;
			child = parent * 2 + 1;
		}
		else
		{
			break;
		}
	}
}
void HeapSort(int *arr, int sz)
{
	assert(arr);
	if (sz <= 1)
	{
		return;
	}
	//建堆
	for (int i = (sz - 2) / 2; i >= 0; --i)
	{
		AdjustDown(arr, sz, i);
	}
	int end = sz - 1;
	while (end > 0)
	{
		std::swap(arr[0], arr[end]);
		AdjustDown(arr, end, 0);
		--end;
	}
}

七、归并排序

归并排序是用分治思想,分治模式在每一层递归上有三个步骤:

  • 分解(Divide):将n个元素分成个含n/2个元素的子序列。
  • 解决(Conquer):用合并排序法对两个子序列递归的排序。
  • 合并(Combine):合并两个已排序的子序列已得到排序结果。

具体代码如下:

void Merge(int *a, int *tmp, int begin1, int end1, int begin2, int end2)
{
 int index = begin1;
 while (begin1 <= end1 && begin2 <= end2)
 {
  if (a[begin1] < a[begin2])
  {
   tmp[index] = a[begin1];
   ++begin1;
  }
  else
  {
   tmp[index] = a[begin2];
   ++begin2;
  }
  ++index;
 }
 while (begin1 <= end1)
 {
  tmp[index++] = a[begin1++];
 }
 while (begin2 <= end2)
 {
  tmp[index++] = a[begin2++];
 }
}

void _MergeSort(int *a, int *tmp, int left, int right)
{
 if (left >= right)
 {
  return;
 }
 int mid = left + (right - left) / 2;
 _MergeSort(a, tmp, left, mid);
 _MergeSort(a, tmp, mid + 1, right);
 Merge(a, tmp, left, mid, mid + 1, right);
 memcpy(a + left, tmp + left, (right - left + 1) * sizeof(int));
}

void MergeSort(int *a, size_t n)
{
 int *tmp = new int[n];
 _MergeSort(a, tmp, 0, n - 1);
 delete[] tmp;
}

八、基数排序

基数排序非常特别,不是基于比较进行排序,而是采用多关键字排序,也就是对关键字的各位的大小进行排序,分为最高位优先(MSD)和最低位优先(LSD)。
具体代码如下:

#define MAX 20
//#define SHOWPASS
#define BASE 10

void print(int *a, int n) {
  int i;
  for (i = 0; i < n; i++) {
    printf("%d\t", a[i]);
  }
}

void radixsort(int *a, int n) {
  int i, b[MAX], m = a[0], exp = 1;

  for (i = 1; i < n; i++) {
    if (a[i] > m) {
      m = a[i];
    }
  }

  while (m / exp > 0) {
    int bucket[BASE] = { 0 };

    for (i = 0; i < n; i++) {
      bucket[(a[i] / exp) % BASE]++;
    }

    for (i = 1; i < BASE; i++) {
      bucket[i] += bucket[i - 1];
    }

    for (i = n - 1; i >= 0; i--) {
      b[--bucket[(a[i] / exp) % BASE]] = a[i];
    }

    for (i = 0; i < n; i++) {
      a[i] = b[i];
    }

    exp *= BASE;

#ifdef SHOWPASS
    printf("\nPASS   : ");
    print(a, n);
#endif
  }
}

int main() {
  int arr[MAX];
  int i, n;

  printf("Enter total elements (n <= %d) : ", MAX);
  scanf("%d", &n);
  n = n < MAX ? n : MAX;

  printf("Enter %d Elements : ", n);
  for (i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
  }

  printf("\nARRAY  : ");
  print(&arr[0], n);

  radixsort(&arr[0], n);

  printf("\nSORTED : ");
  print(&arr[0], n);
  printf("\n");

  return 0;
}

总结

类别排序方法平均情况最好情况最坏情况空间复杂度稳定性
插入排序插入排序0(NA2)〇(N)0(NA2)0⑴稳定
-Shell排序0(NA1.3)〇(N)0(NA2)0⑴不稳定
选择排序选择排序0(NA2)0(NA2)0(NA2)0⑴不稳定
-堆排序0(N*lgN)0(N*lgN)0(N*lgN)0⑴不稳定
交换排序冒泡排序0(NA2)〇(N)0(NA2)0⑴稳定
-快速排序0(N*lgN)0(N*lgN)0(NA2)O(lgN)不稳定
归并排序归并排序0(N*lgN)0(N*lgN)0(N*lgN)〇(N)稳定
9种常见内部排序算法的性能比较 在写完这9种常见的内部排序算法后总觉得需要把它们拿出来好好比较一番,看看各个算法的性能优劣。 我们先来看看各个排序算法的理论性能,再看实际性能。 阅读详情

相关推荐

Unraid小白必看:5分钟搞定OpenWrt软路由安装(附iStoreOS配置技巧)

本文为Unraid新手提供了一份详尽的OpenWrt软路由安装与配置指南。通过虚拟机技术,在Unraid系统上快速部署基于iStoreOS的软路由,详细讲解了旁路由与主路由两种模式的网络配置、性能优化技巧及常见故障排查方法,帮助用户充分利用闲置硬件,打造高性能、可定制的家庭网络中枢。

wine的专栏 485

数据结构(python) —— 【15: NB三人组小结】

快速、堆、归并排序小结 之前讲了Low B三人组,然后最近又讲了NB三人组的快速排序、堆排序和归并排序。 数据结构(python) —— 【08排序: 快速排序】 数据结构(python) —— 【11: 堆排序】 数据结构(python) —— 【14: 归并排序】 其中堆排序可能比较难理解,需要花费更多时间去结合图文进行理解。今天来把这三个排序进行小结一下。 三种排序算法的时间复杂度都是O(nlog(n)) 一般情况下,就运行时间而言: 快速排序 < 归并排序 < 堆排序 三种排序算法的缺

土豆同学的博客 520

springcloud+nacos+gateway+oauth2小聚会

在微服务工程中,Nacos作为目前主流的注册中心和配置中心,Spring Cloud Gateway作为目前主流的网关,下面引入spring security+oauth2+jwt作为认证和授权中心,进行简单的聊聊。

ldcaws的专栏 2646

内部排序算法之比较排序(一)

内部排序算法指的是数据记录在内存中的排序,通常分为两类:比较排序和非比较排序,接下来主要介绍以下常用几个比较排序算法。冒泡排序基本思想:“轻者上浮,重者下沉”;一趟冒泡的过程:从最左或(最右)侧开始依次比较相邻两个元素大小,每次比较的两个元素记为left,right,若right&lt;left则互换两个元素的值,反之继续向另一侧移动,重复上面的比较,直到到达另一侧;每一趟比较都会有一个元素到达最...

wxb247217的博客 1298

手把手教你用P-MOS管搭建双电源自动切换电路(含AO3401选型指南)

本文提供了一份基于P-MOS管AO3401构建高可靠双电源自动切换电路的实战指南。文章详细对比了继电器、理想二极管与MOS管方案的优劣,深入解析了AO3401的关键参数选型,并手把手指导了从原理图设计、PCB布局到上电调试的全过程,旨在帮助硬件工程师和创客以极低成本实现无缝、高效的电源冗余方案。

moss5的博客 1234

应急响应之windows日志分析工具logparser使用

windows日志分析工具logparser使用介绍

u013930899的博客 8123

内部排序算法比较-数据结构C语言课设

(1)对以下7中常会用的内部排序算法进行比较:冒泡排序、直接插入排序、简单选择排序、希尔排序、堆排序、归并排序、快速排序。(2)待排序表的表不小于2000;比较的指标为有关键字参加的比较次数和关键字的移动次数(关键字交换计为3次)。(3)最后要对结果做出简单分析,包括对各组数据得出结果波动大小的解释。在教科书中,各种内部排序算法的时间复杂的分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机数据比较各种算法的关键字比较次数和关键字移动次数,以取得直观感受。人狠话不多,直接上代码!

你们de4月天的博客 6251

VS Code配置Java开发环境避坑指南:从JDK到Spring Boot插件全流程

本文详细介绍了在VS Code中配置Java开发环境的完整流程,涵盖JDK选择、环境变量配置、核心插件安装、构建工具优化及Spring Boot项目专项设置。特别针对常见问题提供避坑方案,帮助开发者快速搭建高效稳定的开发环境,提升Java和Spring Boot开发效率。

weixin_28839699的博客 978

数据结构各内部排序算法总结对比及动图演示(插入排序、冒泡和快速排序、选择排序、堆排序、归并排序和基数排序等)

介绍算法的执行过程、算法可视化演示、算法代码、对比总结

z135733的博客 4819

新买的USB无线网卡插上没反应?保姆级排查指南:从设备管理器到网络列表

本文提供USB无线网卡无法识别的全流程排查手册,涵盖硬件检测、驱动管理和网络配置三大维度。重点解析设备管理器中的设备状态诊断和驱动解决方案,特别适用于Realtek芯片的无线网卡(如RTL8188GU、RTL8812BU等),帮助用户快速解决网卡插上无反应的问题。

weixin_29876033的博客 501

【Python图像处理局部放大】输入图像,选择两处不同的区域进行放大操作,然后将原始图像、处理后的两个区域以及标记合成新图像进行展示

Python图像处理与区域放大连接标记:选择特定区域并对其进行放大操作,然后将原始图像、处理后的两个区域进行标记后的新图像保存到文件中。

qq_35831906的博客 2243

《内部排序算法比较》

《内部排序算法比较》 一、【问题描述】 在教科书中,各种内部排序算法的时间复杂度分析结果只给出算法的大致执行时间。试通过随机数据比较各算法的关键字比较次数和关键字移动次数,以获得直观感受 【基本要求】 (1) 对6种常用内部排序算法进行比较:冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、堆排序 (2) 待排序的表长不小于100,其中数据要用伪随机数产生,至少用5组不同的输入数据做比较 ...

mufen之内部排序算法比较 8848

8.DJI-PSDK:一站式项目功能开发总结(空中气象站项目/激光甲烷检测项目)

本文将以一篇文章的幅度快速完成: 项目一:空中气象站项目; 项目二:激光甲烷项目; 项目所使用的PSDK来源于第0章节末尾的百度网盘;解压:Payload-SDK-3.8.zip代码所在目录:双击打开: 修改打印串口和相关波特率,我们修改如下: 进行相关编译选项配置如下: :

哒宰的博客 294

内部排序算法比较

排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,究竟各有什么特点呢?本文力图设计实现常用内部排序算法并进行比较。分别为起泡排序,直接插入排序,简单选择排序,快速排序,堆排序,针对关键字的比较次数和移动次数进行测试比较.问题分析和总体设计ADT OrderableList{           数据对象:D={ai| ai∈IntegerSet,i=1,2,…,n,n≥0}  

wuhongze的专栏 4722

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

各种内部排序算法的比较

快速排序、选择排序、冒泡排序、堆排序每一趟都能确定一个元素的最终位置。选择排序、冒泡排序、堆排序每一趟都能确定一个最值元素的最终位置。冒泡排序和堆排序在每趟处理后都能产生当前的最大小或者最小值。

weixin_41554427的博客 719

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

《数据结构》之内部排序算法比较

前言 各种内部排序算法的时间复杂度分析结果只给出了算法执行时间的阶,或大概执行时间。试通过随机的数据比较各算法的关键字比较次数和关键字移动次数,以取得直观感受。 基本要求: (1) 从以下常用的内部排序算法至少选取5种进行比较:直接插入排序;折半折入排序;希尔排序;起泡排序;快速排序;简单选择排序;堆排序;归并排序。 (2) 待排序表的表长为20000;其中的数据要用伪随机数产生程序产生;至少要用5组不同的输入数据作比较;比较的指标为有关键字参加的比较次数和关键字移动次数(关键字交换计为3次移动)。 直接上

小小前端攻城狮的博客 7635

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

71各种内部排序算法比较

1、 内部排序算法的比较

weixin_41883890的博客 204

各种内部排序算法的比较和应用

内部排序算法的比较 (表可以往右划) 算法种类 最好时间复杂度 平均时间复杂度 最坏时间复杂度 空间复杂度 稳定性 直接插入排序 O(n) O() O() O(1) 稳定 希尔排序 O(nlogn) O(1) 不稳定 简单选择排序 O() O(​​​​​​​) O(​​​​​​​) O(1) 不稳定 堆排序 O(nlogn) O(nlogn)

24考研人晴落的博客 491

8种内部排序算法比较 (C++)

各种内部排序算法比较 C++ 内容 对大量整数或单词排序,分别用内部排序算法-插入排序(1.直接插入排序、2.折半插入排序、3.希尔排序)、交换排序(4.冒泡、5.快速排序)、选择排序(6.直接选择排序、7.堆排序)和归并排序(8.2-路归并排序)具体实现 ,并可计算排序时间,验证时间复杂度。 源代码 #include<stdio.h> #include<stdlib.h> #include<math.h> #include<time.h> #undef OV

PilotJohnWu的博客 1933

内部排序算法比较(转)

[原创]骑兵排序算法是数据结构学科经典的内容,其中内部排序现有的算法有很多种,究竟各有什么特点呢?本文力图设计实现常用内部排序算法并进行比较。分别为起泡排序,直接插入排序,简单选择排序,快速排序,堆排序,针对关键字的比较次数和移动次数进行测试比较.问题分析和总体设计ADT OrderableList{           数据对象:D={ai| ai∈IntegerSet,i=1,2,…,n,n≥

全是转贴 1441
上一篇: 关于人工智能的一些思考
下一篇: 一卡通系统试验
极客范儿
极客范儿 新星创作者: 游戏开发技术领域 新星创作者: 游戏开发技术领域 领域专家: 人工智能技术领域 领域专家: 人工智能技术领域
博客等级 码龄12年 1万+粉丝 341原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

极客范儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值