【算法基础】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序
目录
1 冒泡排序(Bubble Sort)
2 插入排序(Insertion Sort)
3 选择排序(Selection Sort)
4. 快速排序(Quick Sort)
5. 归并排序(Merge Sort)
6 堆排序 (Heap Sort)
7 计数排序 (Counting Sort)
8 基数排序 (Radix Sort)
9 希尔排序(Shell Sort)
10 桶排序
1 冒泡排序(Bubble Sort)
冒泡排序是一种基本的排序算法,其核心思想是多次遍历待排序的元素,比较相邻的两个元素,如果它们的顺序不正确,则交换它们,直到整个数组按照指定顺序排列。
def bubble_sort(arr):n = len(arr)for i in range(n):for j in range(0, n-i-1):# 比较相邻的两个元素if arr[j] > arr[j+1]:# 如果顺序不正确,则交换它们arr[j], arr[j+1] = arr[j+1], arr[j]# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
bubble_sort(arr)
print("冒泡排序后的数组:", arr)
冒泡排序通过多次遍历数组,每次比较相邻的两个元素,如果它们的顺序不正确就交换它们。这个过程将最大的元素逐渐“冒泡”到数组的末尾。
时间复杂度为 O(n^2),不适合大规模数据集。
2 插入排序(Insertion Sort)
插入排序是一种稳定的排序算法,其核心思想是将未排序的元素逐个插入到已排序的部分,从前往后遍历,保持前面的元素有序。
def insertion_sort(arr):for i in range(1, len(arr)):key = arr[i]j = i - 1while j >= 0 and key < arr[j]:# 将较大的元素向右移动arr[j + 1] = arr[j]j -= 1arr[j + 1] = key# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
insertion_sort(arr)
print("插入排序后的数组:", arr)
插入排序逐个将未排序的元素插入到已排序的部分,从前往后遍历,保持前面的元素有序。时间复杂度为 O(n^2),适合小规模数据集和部分有序的数据。
3 选择排序(Selection Sort)
选择排序是一种简单的不稳定排序算法,其核心思想是找到未排序部分的最小元素,将其与未排序部分的第一个元素交换位置。
def selection_sort(arr):n = len(arr)for i in range(n):min_index = ifor j in range(i+1, n):# 找到未排序部分的最小元素的索引if arr[j] < arr[min_index]:min_index = j# 交换最小元素与未排序部分的第一个元素arr[i], arr[min_index] = arr[min_index], arr[i]# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
selection_sort(arr)
print("选择排序后的数组:", arr)
选择排序通过多次选择未排序部分的最小元素,并将其与未排序部分的第一个元素交换位置来进行排序。时间复杂度为 O(n^2),不适合大规模数据集。
4. 快速排序(Quick Sort)
快速排序是一种高效的分治排序算法,它选择一个基准元素,将数组分成两部分,左边的元素都小于基准,右边的元素都大于基准,然后递归对左右两部分进行排序。
def quick_sort(arr):# 基本情况:如果数组为空或只包含一个元素,无需排序if len(arr) <= 1:return arr# 选择中间元素作为基准点(pivot)pivot = arr[len(arr) // 2]# 将数组分成三部分:小于、等于、大于基准点的元素left = [x for x in arr if x < pivot]middle = [x for x in arr if x == pivot]right = [x for x in arr if x > pivot]# 递归排序左右两部分,然后合并结果return quick_sort(left) + middle + quick_sort(right)# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
arr = quick_sort(arr)
print("快速排序后的数组:", arr)
- 快速排序是一种高效的分治排序算法,它通过选择一个基准点(通常是数组中的中间元素)将数组分成左右两部分,并递归地对左右两部分进行排序。
- 基本情况是数组为空或只包含一个元素,无需排序。
- 针对每个元素,将它与基准点进行比较,分成小于、等于和大于基准点的三个子数组。
- 然后,递归地对左右两部分进行排序,最后将它们与基准点合并,形成一个有序的数组。
5. 归并排序(Merge Sort)
归并排序是一种稳定的分治排序算法,它将数组分成两半,分别排序,然后将已排序的两个子数组合并成一个有序数组。
def merge_sort(arr):# 基本情况:如果数组为空或只包含一个元素,无需排序if len(arr) <= 1:return arr# 将数组分成两半mid = len(arr) // 2left = arr[:mid]right = arr[mid:]# 递归地对左右两部分进行排序left = merge_sort(left)right = merge_sort(right)# 合并已排序的左右两部分return merge(left, right)def merge(left, right):result = []i = j = 0# 合并两个已排序的子数组while i < len(left) and j < len(right):if left[i] < right[j]:result.append(left[i])i += 1else:result.append(right[j])j += 1# 如果左边或右边的子数组还有剩余元素,将它们添加到结果中result.extend(left[i:])result.extend(right[j:])return result# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
arr = merge_sort(arr)
print("归并排序后的数组:", arr)
- 归并排序是一种稳定的分治排序算法,它将数组递归分成两半,然后合并已排序的子数组。
- 基本情况是数组为空或只包含一个元素,无需排序。
- 递归地对左右两部分进行排序,然后使用
merge
函数将它们合并成一个有序的数组。merge
函数将两个已排序的子数组合并,同时维护它们的有序性。
6 堆排序 (Heap Sort)
堆排序是一种不稳定的排序算法,它使用堆数据结构(通常是最大堆)来进行排序。堆排序分为两个主要步骤:建立堆和排序。
def heapify(arr, n, i):largest = ileft = 2 * i + 1right = 2 * i + 2# 找到左子节点和右子节点中的最大值if left < n and arr[left] > arr[largest]:largest = leftif right < n and arr[right] > arr[largest]:largest = right# 如果最大值不是当前节点,交换它们if largest != i:arr[i], arr[largest] = arr[largest], arr[i]def heap_sort(arr):n = len(arr)# 构建最大堆for i in range(n // 2 - 1, -1, -1):heapify(arr, n, i)# 一个接一个地从堆中取出元素,交换根节点与最后一个节点,然后重新构建堆for i in range(n - 1, 0, -1):arr[i], arr[0] = arr[0], arr[i]heapify(arr, i, 0)# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
heap_sort(arr)
print("堆排序后的数组:", arr)
- 排序使用堆数据结构(通常是最大堆)来进行排序。首先构建最大堆,然后一个接一个地从堆中取出元素,交换根节点与最后一个节点,然后重新构建堆。
heapify
函数用于维护堆的性质,即父节点的值大于或等于子节点的值。- 这个算法的时间复杂度为 O(nlogn),是一种高效的排序算法。
7 计数排序 (Counting Sort)
计数排序是一种非比较排序算法,它根据输入元素的计数来对元素进行排序。它适用于整数或有限范围内的非负整数。
def counting_sort(arr):max_val = max(arr)min_val = min(arr)range_of_elements = max_val - min_val + 1count_arr = [0] * range_of_elementsoutput_arr = [0] * len(arr)# 计数每个元素的出现次数for num in arr:count_arr[num - min_val] += 1# 计算每个元素的累积计数for i in range(1, len(count_arr)):count_arr[i] += count_arr[i - 1]# 根据累积计数将元素放入输出数组for i in range(len(arr) - 1, -1, -1):output_arr[count_arr[arr[i] - min_val] - 1] = arr[i]count_arr[arr[i] - min_val] -= 1return output_arr# 示例用法
arr = [4, 2, 2, 8, 3, 3, 1]
arr = counting_sort(arr)
print("计数排序后的数组:", arr)
- 计数排序是一种非比较排序算法,适用于整数或有限范围内的非负整数。
- 首先,计算每个元素的出现次数,然后计算每个元素的累积计数,最后根据累积计数将元素放入输出数组。
- 这个算法的时间复杂度为 O(n+k),其中 k 是输入范围的大小。
8 基数排序 (Radix Sort)
基数排序是一种非比较排序算法,它将数字按照每个位数进行排序,从最低位到最高位,依次排列。
def counting_sort(arr, exp):n = len(arr)output = [0] * ncount = [0] * 10# 计数每个元素的出现次数for i in range(n):index = arr[i] // expcount[index % 10] += 1# 计算每个元素的累积计数for i in range(1, 10):count[i] += count[i - 1]# 根据累积计数将元素放入输出数组i = n - 1while i >= 0:index = arr[i] // expoutput[count[index % 10] - 1] = arr[i]count[index % 10] -= 1i -= 1# 将输出数组的内容复制到原始数组中for i in range(n):arr[i] = output[i]def radix_sort(arr):max_val = max(arr)exp = 1while max_val // exp > 0:counting_sort(arr, exp)exp *= 10# 示例用法
arr = [170, 45, 75, 90, 802, 24, 2, 66]
radix_sort(arr)
print("基数排序后的数组:", arr)
- 基数排序是一种非比较排序算法,它按照每个位数进行排序,从最低位到最高位,依次排列。
- 首先使用计数排序对每个位数进行排序,然后再次对下一个位数进行排序,依次进行直到最高位。
- 这个算法的时间复杂度为 O(nk),其中 k 是数字的最大位数。
9 希尔排序(Shell Sort)
希尔排序(Shell Sort)是一种插入排序的改进版本,也被称为缩小增量排序。希尔排序通过将数组分成若干个子序列来排序数据,然后逐渐缩小子序列的间隔,最终得到一个完全排序的数组。希尔排序的主要思想是提前交换较远的元素,以加快排序过程。
算法原理:
选择一个增量序列(间隔序列),通常选择的增量是数组长度的一半,然后逐渐减小增量。
对于每个增量,将数组分成若干个子序列,每个子序列使用插入排序进行排序。
重复步骤2,逐渐减小增量,直到增量为1。
当增量为1时,整个数组成为一个序列,使用插入排序对其进行排序。
def shell_sort(arr):n = len(arr)gap = n // 2 # 初始增量取数组长度的一半while gap > 0:for i in range(gap, n):temp = arr[i]j = i# 使用插入排序对子序列进行排序while j >= gap and arr[j - gap] > temp:arr[j] = arr[j - gap]j -= gaparr[j] = tempgap //= 2 # 缩小增量# 示例用法
arr = [64, 34, 25, 12, 22, 11, 90]
shell_sort(arr)
print("希尔排序后的数组:", arr)
希尔排序的关键在于选择合适的增量序列。常见的增量序列有希尔增量、Hibbard增量、Knuth增量等,不同的增量序列会影响排序的性能。
希尔排序的时间复杂度取决于增量序列的选择,平均时间复杂度通常在 O(n^1.25) 到 O(n^2) 之间,比插入排序要快。
希尔排序是一种不稳定排序算法,适用于中等大小的数据集。虽然不如快速排序和归并排序快,但在某些情况下比插入排序更快。希尔排序通常用于嵌入式系统等资源有限的环境。
10 桶排序(Bucket Sort)
桶排序(Bucket Sort)是一种分布式排序算法,它将元素分散到一组桶中,然后对每个桶中的元素进行排序,最后将所有桶中的元素按顺序合并成一个有序序列。桶排序适用于元素均匀分布在一个范围内的情况,特别适用于浮点数排序。
算法原理:
确定桶的数量和范围,通常根据输入数据的分布来选择桶的数量。如果元素均匀分布在一个范围内,那么可以选择桶的数量等于元素的数量。
将每个元素分配到相应的桶中。元素的分配可以采用不同的方法,例如线性划分或哈希函数。
对每个桶中的元素进行排序,可以使用任何排序算法,通常选择插入排序。
合并所有桶中的元素,按照桶的顺序得到最终的有序序列。
def bucket_sort(arr):# 确定桶的数量,这里选择与输入元素数量相同n = len(arr)if n <= 1:return arr# 初始化桶max_val = max(arr)min_val = min(arr)bucket_range = (max_val - min_val) / n # 每个桶的范围bucket_count = n # 桶的数量等于元素数量buckets = [[] for _ in range(bucket_count)]# 将元素分配到桶中for num in arr:index = int((num - min_val) / bucket_range)buckets[index].append(num)# 对每个桶中的元素进行排序for i in range(bucket_count):buckets[i].sort()# 合并所有桶中的元素sorted_arr = []for bucket in buckets:sorted_arr.extend(bucket)return sorted_arr# 示例用法
arr = [0.897, 0.565, 0.656, 0.1234, 0.665, 0.3434]
arr = bucket_sort(arr)
print("桶排序后的数组:", arr)
桶排序的性能取决于桶的数量和元素的分布。如果元素均匀分布在一个范围内,并且桶的数量足够多,那么桶排序可以非常高效。
桶排序的时间复杂度通常为 O(n + k),其中 n 是元素的数量,k 是桶的数量。
桶排序是一种稳定排序算法,适用于浮点数排序等特定情况。不过,它需要额外的内存空间来存储桶,因此不适用于数据集非常大的情况。
相关文章:
【算法基础】一文掌握十大排序算法,冒泡排序、插入排序、选择排序、归并排序、计数排序、基数排序、希尔排序和堆排序
目录 1 冒泡排序(Bubble Sort) 2 插入排序(Insertion Sort) 3 选择排序(Selection Sort) 4. 快速排序(Quick Sort) 5. 归并排序(Merge Sort) 6 堆排序 …...
javascript二维数组(3):指定数组元素的特定属性进行搜索
js中对数组, var data [{“name”: “《西游记》”, “author”: “吴承恩”, “cat”: “A级书刊”, “num”: 3},{“name”: “《三国演义》”, “author”: “罗贯中”, “cat”: “A级书刊”, “num”: 8},{“name”: “《红楼梦》”, “author”: “曹雪芹”,…...
使用Qt进行HTTP通信的方法
文章目录 1 HTTP协议简介1.1 HTTP协议的历史和发展1.2 HTTP协议的特点1.3 HTTP的工作过程1.4 请求报文1.5 响应报文 2 使用Qt进行HTTP通信2.1 Qt的HTTP通信类2.2 HTTP通信过程 3 JSON3.1 cJSON库简介3.2 cJSON库的设计思想和数据结构3.3 cJSON库的使用方法 1 HTTP协议简介 1.1…...
第45节——页面中修改redux里的数据
一、什么是action 在 Redux 中,Action 是一个简单的 JavaScript 对象,用于描述对应应用中的某个事件(例如用户操作)所发生的变化。它包含了一个 type 属性,用于表示事件的类型,以及其他一些可选的数据。 …...
软考 系统架构设计师系列知识点之软件架构风格(2)
接前一篇文章:软考 系统架构设计师系列知识点之软件架构风格(1) 这个十一注定是一个不能放松、保持“紧”的十一。由于报名了全国计算机技术与软件专业技术资格(水平)考试,11月4号就要考试,因此…...
【C++11】Lambda 表达式:基本使用 和 底层原理
文章目录 Lambda 表达式1. 不考虑捕捉列表1.1 简单使用介绍1.2 简单使用举例 2. 捕捉列表 [ ] 和 mutable 关键字2.1 使用方法传值捕捉传引用捕捉 2.2 捕捉方法一览2.3 使用举例 3. lambda 的底层分析 Lambda 表达式 书写格式: [capture_list](parameters) mutabl…...
【网络安全---ICMP报文分析】Wireshark教程----Wireshark 分析ICMP报文数据试验
一,试验环境搭建 1-1 试验环境示例图 1-2 环境准备 两台kali主机(虚拟机) kali2022 192.168.220.129/24 kali2022 192.168.220.3/27 1-2-1 网关配置: 编辑-------- 虚拟网路编辑器 更改设置进来以后 ,先选择N…...
【Docker】Docker的应用包含Sandbox、PaaS、Open Solution以及IT运维概念的详细讲解
前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux或Windows操作系统的机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。 📕作者简介:热…...
Java Applet基础
Java Applet基础 目录 Java Applet基础 Applet的生命周期 "Hello, World" Applet: Applet 类 Applet的调用 获得applet参数 指定applet参数 应用程序转换成Applet 事件处理 显示图片 播放音频 applet是一种Java程序。它一般运行在支持Java的Web浏览器内。因…...
【记录】IDA|IDA怎么查看当前二进制文件自动分析出来的内存分布情况(内存范围和读写性)
IDA版本:7.6 背景:我之前一直是直接看Text View里面的地址的首尾地址来判断内存分布情况的,似乎是有点不准确,然后才想到IDA肯定自带查看内存分布情况的功能,而且很简单。 可以通过View-Toolbars-Segments,…...
LIMS实验室信息管理系统源码 基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体
LIMS 是一个集现代化管理思想与基于计算机的数据处理技术、数据存储技术、网络传输技术、自动化仪器分析技术于一体,以实验室业务和管理工作为核心,遵循实验室管理国际规范,实现对实验室全方位管理的信息管理系统。 LIMS将样品管理、数据管理…...
有效括号相关
相关题目 20. 有效的括号 921. 使括号有效的最少添加 1541. 平衡括号字符串的最少插入次数 32. 最长有效括号 # 20. 有效的括号 class Solution:def isValid(self, s: str) -> bool:stack []for pare in s:if pare in ([{:stack.append(pare)if not stack or (pare ) and…...
浅谈泛型擦除
文章目录 泛型擦除(1)转换泛型表达式(2)转换泛型方法泛型擦除带来的问题 泛型擦除 在编码阶段使用泛型时加上的类型参数,会被编译器在编译阶段去掉,这个过程叫做泛型擦除。 泛型主要用于编译阶段。在编译后生成的Java字节码文件中不包含泛型中的类型信息…...
nodejs+vue校园跑腿系统elementui
购物车品结算,管理个人中心,订单管理,接单处理,商品维护,用户管理,系统管理等功育食5)要求系统运行可靠、性能稳定、界面友好、使用方便。 第三章 系统分析 10 3.1需求分析 10 3.2可行性分析 10 3.2.1技术…...
Redis Cluster Cron调度
返回目录 说明 clusterCron 每秒执行10次clusterCron 内置了一个iteration计数器。每一次运行clusterCron,iteration都加1。当 iteration % 10 0的时候,就会随机选取一个节点,给它发送PING。而由于clusterCron每秒执行10次,所以…...
Redis Cluster Gossip Protocol: Message
返回目录 消息结构 消息头部消息数据(可选)extension(可选) 消息头部 字段定义 Signature: “RCmb” 这4个字符(Redis Cluster message bus 的简称)totalLen: 消息的总字节数version:当前为…...
【JVM】第四篇 垃圾收集器ParNewCMS底层三色标记算法详解
导航 一. 垃圾收集算法详解1. 分代收集算法2. 标记-复制算法3. 标记-清除算法4. 标记-整理算法二. 垃圾收集器详解1. Serial收集器2. Parallel Scavenge收集器3. ParNew收集器4. CMS收集器三. 垃圾收集底层三色标记算法实现原理1. 垃圾收集底层使用三色标记算法的原因?2. 垃圾…...
STM32复习笔记(四):独立看门狗IWDG
目录 (一)简介 (二)CUBEMX工程配置 (三)相关函数 总结: (一)简介 独立看门狗本质是一种定时器,其作用是监视系统的运行,当系统发生错误&…...
SpringBoot中常用注解的含义
一、方法参数注解 1. PathVariable 通过RequestMapping注解中的 { } 占位符来标识URL中的变量部分 在控制器中的处理方法的形参中使用PathVariable注解去获取RequestMapping中 { } 中传进来的值,并绑定到处理方法定一的形参上。 //请求路径:http://3333…...
学位论文的写作方法,较好的参考文章
摘要 结合2个文章: [1]程鑫. 网联环境下交通状态预测与诱导技术研究[D]. 长安大学, 2017. [2]吴昊. 关中平原水资源变化特征与干旱脆弱性研究[D]. 长安大学, 2018. 主要研究内容及技术路线 各章小结和引言的写作 [1]程鑫. 网联环境下交通状态预测与诱导技术…...
基于SpringBoot的科研工作量获奖项目管理平台设计与实现(源码+lw+部署文档+讲解等)
文章目录 前言具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序(小蔡coding)有保障的售后福利 代码参考源码获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师、全栈领域优质创作…...
嵌入式Linux应用开发-驱动大全-第一章同步与互斥④
嵌入式Linux应用开发-驱动大全-第一章同步与互斥④ 第一章 同步与互斥④1.5 自旋锁spinlock的实现1.5.1 自旋锁的内核结构体1.5.2 spinlock在UP系统中的实现1.5.3 spinlock在SMP系统中的实现 1.6 信号量semaphore的实现1.6.1 semaphore的内核结构体1.6.2 down函数的实现1.6.3 u…...
算法-数学-斜率-直线上最多的点数
算法-数学-斜率-直线上最多的点数 1 题目概述 1.1 题目出处 https://leetcode.cn/problems/max-points-on-a-line/ 1.2 题目描述 给你一个数组 points ,其中 points[i] [xi, yi] 表示 X-Y 平面上的一个点。求最多有多少个点在同一条直线上。 2 暴力搜索斜率…...
项目进展(五)-修复PCB电路板,学习32位ADC芯片ADS1285
一、前言 上个月29号放假了,和朋友一起去了南京(人是真滴多),师兄晚放假几天,结果在测试时不小心把12V和GND碰触到一起了,导致12V短路,电路板几乎瘫痪了。 今天下午到学校之后就开始着手寻找问题和修复,最…...
(三) Markdown插入互联网或本地视频解决方案
前言 不论博客系统是WordPress还是Typecho,绕不开的是两种书写语言,一种称之为富文本,一种叫做Markdown。 Markdown有很多好处,也有很多坏处,比如Markdown本身不具备段落居中的功能,以及Markdown也不具有…...
HPA (Horizontal Pod Autoscaler) In K8s
城市红绿灯智能调节 没准正在建设中哈哈哈 作为一位城市观察者和设计师,我想借助Kubernetes的HPA机制思想来描述城市红绿灯自动调节的场景。 在这个故事中,我们的城市面临着日益增长的交通流量和挤塞问题。为了应对这一挑战,城市决定引入智能…...
Ubuntu安装samba服务器
为了window系统下能够像访问本地目录一样访问ubuntu系统下的目录,这里我通过安装samba服务器,将ubuntu系统的文件目录通过网络挂载的方式共享出来,以便在window下就能够对ubuntu系统的文件进行读写等访问操作,这里记录一下samba服…...
[SpringBoot] 8. aop 获取 request response
最近开发有一个需求需要在 aop 中获取request response ,搜索许久没有答案,故此记录📝~ aop 获取 package com.example.easy_im.aop;import com.example.easy_im.Context; import jakarta.servlet.http.HttpServletRequest; impo…...
同学苹果ios的ipa文件应用企业代签选择签名商看看这篇文章你再去吧
同学我们要知道随着互联网的发展,苹果应用市场的火爆,越来越多的开发者加入到苹果应用开发行业中来。同时,苹果应用市场上的应用也在不断增多,用户数量也在不断增加,苹果应用代签是指通过第三方公司为开发者的应用进行…...
【PyCharm Community Edition】:excel操作
Excel操作 相关模块openpyxlxlrdshutil 实例 相关模块 openpyxl 可以对.xlsx,.xlsm,.xltx,.xltm文件格式操作 打开文件:wb_xlsx openpyxl.load_workbook(“文件名”)新建文件:wb_xlsx openpyxl.Workbook()新建sheet表:wb_xlsx_sheet wb…...
微信推广网站建设/游戏推广公司靠谱吗
在信息技术高速发展的时代里,计算机证尤为重要,那么计算机一级考什么呢。以下是由出国留学网编辑为大家整理的“计算机一级考什么内容有哪些”,仅供参考,欢迎大家阅读。计算机一级考什么内容 有哪些1. 采用无纸化考试,上机操作。考…...
西部数码备案域名购买/win7优化大师官网
为什么80%的码农都做不了架构师?>>> 解决intellij中sPRing boot工程 无法用mainapplication启动问题 一、spring boot 工程 从svn库导出到 intellij idea中 后用mainApplication中的main函数启动时会出现 Failed to introspect annotated methods on cl…...
京东优惠券网站建设/厦门谷歌推广
所谓"data"类型的Url格式,是在RFC2397中 提出的,目的对于一些“小”的数据,可以在网页中直接嵌入,而不是从外部文件载入。例如对于img这个Tag,哪怕这个图片非常非常的小,小到只有一个点ÿ…...
盐山网站建设/品牌营销网站建设
T2 题解: x与y相交说明a[x] < b[y]且a[y] < b[x] x在y左边说明b[x] < a[y] 每条线段x还应满足a[x] < b[x] 这相当于一个拓扑排序问题,小的数相当于安排在前面的任务 输出的第i个数就是第i个任务,那么a[1]尽可能小说明任务1要…...
怎样做二维码链接到网站上/附近广告公司
水果行业专业朋友圈营销文案,同行朋友圈运营精选水果文案大全。水果文案已更新300多类的水果,千条文案和图片,复制轻松发朋友圈。 1、怎么能看到这些朋友圈文案 朋友圈下的搜一搜,搜鲁班文案,找出来的文章,…...
杭seo网站建设排名/佛山优化网站关键词
无论你如何将Hadoop与Spark进行对比,无论Spark生态多么成熟和完善,其底层终归要基于HDFS,毕竟这是目前最成熟的分布式底层文件系统,几乎没有哪家公司愿意重新花费精力研发一个全新的文件系统。本文将讨论Hadoop分布式文件系统(HDF…...