8 大内部排序算法图文讲解

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

一、插入排序

1.1 介绍

插入排序是一种简单直观的排序算法,其基本思想是将待排序的元素逐个插入到已排序序列的合适位置,最终得到完整的有序序列。这个过程类似于打扑克牌时将手中的牌按照大小顺序插入已经排好序的牌堆中的过程。

1.2 步骤

下面是插入排序的基本步骤:

1. 初始状态:将第一个元素视为已排序序列,其余元素为待排序序列。

2. 遍历待排序序列:从第二个元素开始,依次将每个元素插入到已排序序列的合适位置。

3. 插入操作:对于当前待排序元素,从其前一个元素开始向前遍历已排序序列,直到找到小于或等于当前元素的位置为止。然后将当前元素插入到该位置后面,使得插入后的序列仍然保持有序。

4. 重复操作:重复步骤2和步骤3,直到所有待排序元素都被插入到已排序序列中。

1.3 示例

下面是插入排序的示例(以升序排序为例):

假设初始序列为:[5, 2, 4, 6, 1, 3]

1. 第一轮排序:已排序序列为[5],待排序序列为[2, 4, 6, 1, 3] 将2插入到已排序序列中,得到[2, 5]。

2. 第二轮排序:已排序序列为[2, 5],待排序序列为[4, 6, 1, 3] 将4插入到已排序序列中,得到[2, 4, 5]。

3. 第三轮排序:已排序序列为[2, 4, 5],待排序序列为[6, 1, 3] 将6插入到已排序序列中,得到[2, 4, 5, 6]。

4. 第四轮排序:已排序序列为[2, 4, 5, 6],待排序序列为[1, 3] 将1插入到已排序序列中,得到[1, 2, 4, 5, 6]。

5. 第五轮排序:已排序序列为[1, 2, 4, 5, 6],待排序序列为[3] 将3插入到已排序序列中,得到[1, 2, 3, 4, 5, 6]。

经过5轮插入操作,最终得到了完整的有序序列。

1.4 特点

插入排序的时间复杂度为O(n^2),其中n为待排序序列的长度。它是一种稳定的排序算法,适用于小规模数据或者部分有序的数据。

二、希尔排序

2.1 介绍

希尔排序(Shell Sort)是插入排序的一种改进版本,也被称为“缩小增量排序”。它通过将待排序的序列分成若干个子序列,对每个子序列进行插入排序,最终逐步减小子序列的间隔,直至间隔为1,完成排序。

希尔排序的基本思想是,通过使数组中任意间隔为h的元素都是有序的,从而使得整个数组基本有序。这样的有序数组对插入排序的效率非常高,因为只需要少量的移动操作就能完成排序。

2.2 步骤

下面是希尔排序的基本步骤:

1. 选择间隔序列:选择一个递减的间隔序列(增量序列),通常以n/2开始,之后每次缩小一半,直至间隔为1。

2. 对每个间隔进行插入排序:对于每个间隔h,对数组中以h为间隔的元素进行插入排序。

3. 重复缩小间隔:重复以上步骤,不断缩小间隔直至间隔为1。

希尔排序的关键在于间隔序列的选择,不同的间隔序列会影响到排序的效率。常用的间隔序列有希尔原始序列(h = 3 * h + 1),也可以根据实际情况选择其他的间隔序列。

2.3 示例

下面是希尔排序的示例(以升序排序为例):

假设初始序列为:[8, 3, 6, 4, 2, 9, 1, 5, 7]

1. 第一轮排序:间隔为4

○ 对子序列[8, 2], [3, 9], [6, 1], [4, 5], [2, 7]分别进行插入排序。

○ 得到子序列[2, 3, 1, 4, 2], [8, 9, 6, 5, 7],整个序列变为[2, 3, 1, 4, 2, 8, 9, 6, 5, 7]。

2. 第二轮排序:间隔为2

○ 对子序列[2, 1, 2, 9, 5], [3, 4, 8, 6, 7]分别进行插入排序。

○ 得到子序列[1, 2, 2, 5, 9], [3, 4, 6, 7, 8],整个序列变为[1, 2, 2, 5, 9, 3, 4, 6, 7, 8]。

3. 第三轮排序:间隔为1

○ 对整个序列进行插入排序。

○ 最终得到有序序列[1, 2, 2, 3, 4, 5, 6, 7, 8, 9]。

2.4 特点

希尔排序的时间复杂度取决于间隔序列的选择,但通常情况下为O(n log n)到O(n^2)之间。希尔排序相比于简单的插入排序有更好的性能,特别是对于大型数据集合。

三、选择排序

3.1 介绍

选择排序(Selection Sort)是一种简单直观的排序算法,它的基本思想是每次从未排序的序列中选择最小(或最大)的元素,将其放到已排序序列的末尾(或开头),直到所有元素都被排序完成。

3.2 步骤

下面是选择排序的基本步骤:

1. 初始状态:将整个序列分为两部分,一部分是已排序序列,另一部分是未排序序列。初始时已排序序列为空,未排序序列包含所有待排序的元素。

2. 选择最小元素:从未排序序列中选择最小的元素,将其与未排序序列的第一个元素交换位置,使得未排序序列的第一个元素成为已排序序列的最后一个元素。

3. 增加已排序部分的长度:将已排序序列的长度增加1,将未排序序列的长度减少1。

4. 重复操作:重复步骤2和步骤3,直到未排序序列的长度为0,即所有元素都被排序完成。

选择排序的特点是每次交换都会确定一个元素的最终位置,因此它是一种不稳定的排序算法。

3.3 示例

下面是选择排序的示例(以升序排序为例):

假设初始序列为:[5, 2, 4, 6, 1, 3]

1. 第一轮排序:从未排序序列中选择最小的元素1,与未排序序列的第一个元素5交换位置,得到序列[1, 2, 4, 6, 5, 3]。

2. 第二轮排序:从未排序序列中选择最小的元素2,与未排序序列的第一个元素2交换位置(实际上不需要交换),得到序列[1, 2, 4, 6, 5, 3]。

3. 第三轮排序:从未排序序列中选择最小的元素3,与未排序序列的第一个元素4交换位置,得到序列[1, 2, 3, 6, 5, 4]。

4. 以此类推,直到所有元素都被排序完成。

经过多轮的选择和交换操作,最终得到了完整的有序序列。

3.4 特点

选择排序的时间复杂度为O(n^2),其中n为待排序序列的长度。它是一种简单但不是很高效的排序算法,适用于小规模数据或者简单的排序任务。

四、冒泡排序

4.1 介绍

冒泡排序(Bubble Sort)是一种简单直观的排序算法,它重复地遍历待排序序列,依次比较相邻的元素,并且在需要时交换它们的位置,直到整个序列有序为止。

基本思想是从待排序序列的起始位置开始,依次比较相邻的两个元素,如果顺序不符合排序要求(比如要求升序排列,但左边的元素比右边的大),则交换这两个元素的位置,使得较大(或较小)的元素向右(或向左)移动。这样一轮下来,最大(或最小)的元素就会“冒泡”到序列的末尾。然后,再对剩余的未排序部分重复这个过程,直到整个序列有序。

4.2 步骤

下面是冒泡排序的基本步骤:

1. 外层循环:从序列的起始位置开始,进行n-1轮遍历(n为序列的长度)。

2. 内层循环:在每轮遍历中,从第一个元素开始,依次比较相邻的两个元素,如果顺序不符合排序要求,则交换它们的位置。

3. 重复交换:每轮遍历会将当前未排序部分的最大(或最小)元素“冒泡”到序列的末尾,因此下一轮遍历时可以减少一个元素的比较次数。

4. 重复操作:重复以上步骤,直到所有元素都被排序好。

4.3 示例

下面是冒泡排序的示例(以升序排序为例):

假设初始序列为:[5, 2, 4, 6, 1, 3]

1. 第一轮排序:

○ 比较相邻的元素:[5, 2, 4, 6, 1, 3],发现5比2大,交换它们的位置,序列变为[2, 5, 4, 6, 1, 3]。

○ 继续比较:[2, 5, 4, 6, 1, 3],发现5比4大,交换它们的位置,序列变为[2, 4, 5, 6, 1, 3]。

○ 继续比较:[2, 4, 5, 6, 1, 3],6比1大,交换它们的位置,序列变为[2, 4, 5, 1, 6, 3]。

○ 继续比较:[2, 4, 5, 1, 6, 3],6比3大,交换它们的位置,序列变为[2, 4, 5, 1, 3, 6]。

○ 此时最大的元素6已经冒泡到了序列末尾。

2. 第二轮排序:

○ 继续按照上述步骤比较交换,直到序列变为[2, 4, 1, 3, 5, 6]。

3. 第三轮排序:

○ 继续按照上述步骤比较交换,直到序列变为[2, 1, 3, 4, 5, 6]。

4. 第四轮排序:

○ 继续按照上述步骤比较交换,直到序列变为[1, 2, 3, 4, 5, 6]。

经过4轮排序,最终得到了完整的升序序列。

4.4 特点

冒泡排序的时间复杂度为O(n^2),其中n为待排序序列的长度。它是一种稳定的排序算法,适用于小规模数据或者基本有序的数据。然而,由于其时间复杂度较高,不适用于大规模数据的排序。

五、归并排序

5.1 介绍

归并排序(Merge Sort)是一种经典的、高效的排序算法,采用了分治策略。它将待排序序列分成两个子序列,分别对子序列进行递归排序,然后将已排序的子序列合并成一个有序序列。其核心思想是将两个有序的子序列合并成一个更大的有序序列。

5.2 步骤

归并排序的基本步骤如下:

1. 分解:将待排序序列分解成两个子序列,直到子序列的长度为1,即无法再分解为止。

2. 解决:对每个子序列进行排序,可以使用递归调用归并排序算法。

3. 合并:将已排序的子序列合并成一个有序序列。

下面是归并排序的详细过程:

1. 分解:将待排序序列分解成长度相等(或相差不超过1)的两个子序列,分别递归地对这两个子序列进行归并排序,直到子序列的长度为1。

2. 解决:递归地对每个子序列进行归并排序,直到所有的子序列都变成了只有一个元素的有序序列。

3. 合并:将已排序的子序列两两合并成更大的有序序列,具体方法如下:

○ 创建一个临时数组,用来存放合并后的结果。

○ 设置两个指针分别指向两个已排序的子序列的起始位置。

○ 比较两个子序列当前位置的元素,将较小的元素放入临时数组中,并将相应指针向后移动一位。

○ 重复上述步骤,直到其中一个子序列被合并完毕。

○ 将剩余未合并的子序列直接复制到临时数组中。

○ 将临时数组中的元素复制回原始数组的相应位置,完成合并操作。

5.3 示例

下面是归并排序的示例(以升序排序为例):

假设初始序列为:[38, 27, 43, 3, 9, 82, 10]

1. 第一步分解:

○ 将序列分解成[38, 27, 43, 3]和[9, 82, 10]两个子序列。

2. 第二步解决:

○ 递归地对子序列进行归并排序,得到[3, 27, 38, 43]和[9, 10, 82]。

3. 第三步合并:

○ 将两个已排序的子序列[3, 27, 38, 43]和[9, 10, 82]合并成[3, 9, 10, 27, 38, 43, 82]。

经过以上步骤,最终得到了完整的升序序列。

5.4 特点

归并排序的时间复杂度为O(n log n),其中n为待排序序列的长度。由于归并排序是一种稳定的排序算法,并且适用于各种数据类型,因此它被广泛应用于实际场景中。然而,归并排序需要额外的空间来存储临时数组,因此空间复杂度较高。

六、快速排序

6.1 介绍

快速排序(Quick Sort)是一种高效的排序算法,它采用了分治策略。快速排序的基本思想是通过选取一个基准元素,将待排序序列分成两个子序列,其中一个子序列中的所有元素都小于等于基准元素,另一个子序列中的所有元素都大于基准元素。然后对这两个子序列分别进行递归排序,最终将整个序列排序完成。

6.2 步骤

快速排序的基本步骤如下:

1. 选择基准:从待排序序列中选择一个基准元素,通常选择序列中的第一个元素、最后一个元素或者中间的元素。

2. 分区:将待排序序列中的元素按照基准元素的大小分成两个子序列,一个子序列中的元素都小于等于基准元素,另一个子序列中的元素都大于基准元素。

3. 递归排序:对这两个子序列分别递归地应用快速排序算法,直到子序列的长度为1或0,即无法再分解为止。

4. 合并:将排好序的子序列合并成一个有序序列。

下面是快速排序的详细过程:

1. 选择基准:从待排序序列中选择一个基准元素,例如选择序列中的第一个元素。

2. 分区:将序列中的元素按照基准元素的大小进行分区,将比基准元素小的元素放到基准元素的左边,将比基准元素大的元素放到基准元素的右边。这一步通常使用双指针法来实现,一个指针从左边开始,一个指针从右边开始,当两个指针相遇时分区结束。

3. 递归排序:对分区后的两个子序列分别递归地应用快速排序算法,直到子序列的长度为1或0。

4. 合并:由于快速排序是原地排序算法,因此不需要显式地合并子序列。

6.3 示例

下面是快速排序的示例(以升序排序为例):

假设初始序列为:[38, 27, 43, 3, 9, 82, 10]

1. 第一步选择基准:选择序列中的第一个元素38作为基准。

2. 第二步分区:

○ 将序列按照基准元素38进行分区,小于38的放在左边,大于38的放在右边。

○ 分区后序列变为:[27, 3, 9, 10, 38, 43, 82]

3. 第三步递归排序:

○ 对左边的子序列[27, 3, 9, 10]和右边的子序列[43, 82]分别递归地应用快速排序算法。

○ 子序列[27, 3, 9, 10]的基准元素为27,分区后变为[3, 9, 10, 27]。

○ 子序列[43, 82]的基准元素为43,分区后不变。

4. 最终合并:由于快速排序是原地排序算法,不需要显式合并。

经过以上步骤,最终得到了完整的升序序列。

6.4 特点

快速排序的时间复杂度为O(n log n),其中n为待排序序列的长度。由于快速排序是一种原地排序算法,并且具有较高的平均性能,因此它被广泛应用于各种场景中。然而,在最坏情况下,快速排序的时间复杂度会退化为O(n^2),即当选择的基准元素不合适时,会导致递归树的深度过大,造成性能下降。

七、堆排序

7.1 介绍

堆排序(Heap Sort)是一种基于完全二叉树结构的排序算法,它利用了堆数据结构的特性进行排序。堆是一种特殊的树形数据结构,它满足堆属性:对于每个节点i,其父节点的值要么大于等于(最大堆)或小于等于(最小堆)节点i的值。

堆排序的基本思想是首先将待排序序列构建成一个堆(通常是最大堆),然后反复将堆顶元素(最大元素)与堆的最后一个元素交换,并调整堆使其满足堆属性,最终得到一个有序序列。

7.2 步骤

堆排序的主要步骤如下:

1. 构建堆:将待排序序列构建成一个堆。从序列的中间位置向前遍历,依次将每个非叶子节点作为根节点,通过向下调整(heapify)操作使得其满足堆属性。这一步的时间复杂度为O(n),其中n为序列的长度。

2. 堆调整:交换堆顶元素(最大元素)与堆的最后一个元素,然后通过向下调整操作重新调整堆,使其满足堆属性。这一步的时间复杂度为O(log n),其中n为堆的大小。

3. 重复操作:重复步骤2,直到堆中只剩下一个元素。

4. 得到有序序列:此时堆中只剩下一个元素,即已经排好序的元素,将其取出即可得到有序序列。

7.3 示例

下面是堆排序的详细过程(以升序排序为例):

假设初始序列为:[7, 6, 3, 5, 4, 1, 2]

1. 构建堆:从序列中间位置开始,依次向前遍历,对每个非叶子节点进行向下调整操作,得到最大堆。经过调整后,序列变为:[7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2] -> [7, 6, 3, 5, 4, 1, 2]。

2. 堆调整:交换堆顶元素7与最后一个元素2,并调整堆,得到[2, 6, 3, 5, 4, 1, 7]。

3. 重复操作:继续交换堆顶元素与最后一个元素,并进行堆调整,得到[1, 6, 3, 5, 4, 2, 7] -> [1, 5, 3, 6, 4, 2, 7] -> [1, 4, 3, 5, 2, 6, 7] -> [1, 3, 2, 5, 4, 6, 7] -> [1, 2, 3, 5, 4, 6, 7]。

4. 得到有序序列:最后得到有序序列[1, 2, 3, 4, 5, 6, 7]。

7.4 特点

堆排序的时间复杂度为O(n log n),其中n为待排序序列的长度。堆排序是一种原地排序算法,不需要额外的空间,但由于其对数据的访问方式不够友好,因此在实际应用中,性能可能不如快速排序。然而,堆排序在实现上相对简单,且在对内存空间有限制的情况下也能够很好地工作。

八、基数排序

8.1 介绍

基数排序(Radix Sort)是一种非比较性的整数排序算法,它利用了“按位分配”的思想,对于有限范围内的整数排序非常高效。基数排序将待排序的整数按照位数从低位到高位依次进行排序,每次排序根据当前位的值进行桶排序或计数排序,直到所有位数都被考虑完毕,最终得到有序序列。

8.2 步骤

基数排序的基本步骤如下:

1. 确定位数:首先确定待排序整数的最大位数,以确定需要进行多少轮排序。

2. 按位分配:从低位到高位依次考虑每一位数值,对整数进行按位分配。

3. 桶排序或计数排序:对于每一位数值,可以选择使用桶排序或计数排序对待排序整数进行排序。

4. 重复操作:重复上述步骤,直到所有位数都被考虑完毕。

5. 得到有序序列:最终得到有序序列。

8.3 示例

下面是基数排序的详细过程:

假设初始序列为:[170, 45, 75, 90, 802, 24, 2, 66]

1. 确定位数:对于给定的序列,最大的整数为802,它是三位数,因此需要进行三轮排序。

2. 第一轮排序(个位数):按照个位数的值对整数进行桶排序或计数排序。得到排序后的序列:[170, 90, 802, 2, 24, 45, 75, 66]。

3. 第二轮排序(十位数):按照十位数的值对整数进行桶排序或计数排序。得到排序后的序列:[802, 2, 24, 45, 66, 170, 75, 90]。

4. 第三轮排序(百位数):按照百位数的值对整数进行桶排序或计数排序。得到排序后的序列:[2, 24, 45, 66, 75, 90, 170, 802]。

经过三轮排序,最终得到了完整的升序序列。

8.4 特点

基数排序的时间复杂度为O(n*k),其中n为待排序序列的长度,k为最大位数。当待排序序列中的数值范围较大时,基数排序的性能可能会受到影响。基数排序是一种稳定的排序算法,并且适用于整数等非负数值的排序。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/397661.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

软件测试面试题常见一百道【含答案】

1、问:你在测试中发现了一个bug,但是开发经理认为这不是一个bug,你应该怎样解决? 首先,将问题提交到缺陷管理库里面进行备案。 然后,要获取判断的依据和标准: 根据需求说明书、产品说明、设计文档等&am…

75.SpringMVC的拦截器和过滤器有什么区别?执行顺序?

75.SpringMVC的拦截器和过滤器有什么区别?执行顺序? 区别 拦截器不依赖与servlet容器,过滤器依赖与servlet容器。拦截器只能对action请求(DispatcherServlet 映射的请求)起作用,而过滤器则可以对几乎所有的请求起作用。拦截器可…

Redis基础和高级使用

文章目录 Redis概述Redis简介Redis特点Redis适合于做Redis不适合于做Redis安装 Redis命令Redis命令Redis的键 Redis数据类型Redis支持的数据类型字符串及相关命令字符串应用场景:列表及相关命令列表应用场景:集合及相关命令集合应用场景:有序…

环信IM Android端实现华为推送详细步骤

首先我们要参照华为的官网去完成 ,以下两个配置都是华为文档为我们提供的 1.https://developer.huawei.com/consumer/cn/doc/HMSCore-Guides/android-config-agc-0000001050170137#section19884105518498 2.https://developer.huawei.com/consumer/cn/doc/HMSCore…

[OpenAI]继ChatGPT后发布的Sora模型解析与体验通道

前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家:https://www.captainbed.cn/z ChatGPT体验地址 文章目录 前言OpenAI体验通道Spacetime Latent Patches 潜变量时空碎片, 建构视觉语言系统…

HTTPS(超文本传输安全协议)被恶意请求该如何处理。

HTTPS(超文本传输安全协议)端口攻击通常是指SSL握手中的一些攻击方式,比如SSL握手协商过程中的暴力破解、中间人攻击和SSL剥离攻击等。 攻击原理 攻击者控制受害者发送大量请求,利用压缩算法的机制猜测请求中的关键信息&#xf…

【压缩感知基础】Nyquist采样定理

Nyquist定理,也被称作Nyquist采样定理,是由哈里奈奎斯特在1928年提出的,它是信号处理领域的一个重要基础定理。它描述了连续信号被离散化为数字信号时,采样的要求以避免失真。 数学表示 Nyquist定理的核心内容可以描述如下&…

java+vue_springboot企业设备安全信息系统14jbc

企业防爆安全信息系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了vue框架。该系统从三个对象:由管理员、人员和企业来对系统进行设计构建。主要功能包括:个人信息修改,对人员管理&am…

目录IO 2月19日学习笔记

1. lseek off_t lseek(int fd, off_t offset, int whence); 功能: 重新设定文件描述符的偏移量 参数: fd:文件描述符 offset:偏移量 whence: SEEK_SET 文件开头 SEE…

Expected class selector “.menuChildMall“ to be kebab-case报错原因

![在这里插入图片描述](https://img-blog.csdnimg.cn/dire ct/6b72bda760a2497a90558d48bd0a4de3.png) 使用stylelint格式化css文件时候报上述错误: 原因: css类名未使用-分隔符 将类名修改为: .menu-child-mall形式即可

C++11---(2)

目录 一、新增容器 1.1、array 1.2、forward_list 1.3、unordered系列 二、右值引用和移动语义 2.1、什么是左值,什么是左值引用 2.2、什么是右值,什么是右值引用 2.3、左值引用和右值引用比较 2.4、右值引用使用场景和意义 2.5、右值引用引用…

【教程】详解相机模型与坐标转换

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 由于复制过来,如果有格式问题,推荐大家直接去我原网站上查看: 相机模型与坐标转换 - 生活大爆炸 目录 经纬度坐标系 转 地球直角坐标系大地直角坐标系 转 经纬度坐标系地理坐标…

MLP-Mixer: AN all MLP Architecture for Vision

发表于NeurIPS 2021, 由Google Research, Brain Team发表。 Mixer Architecture Introduction 当前的深度视觉结构包含融合特征(mix features)的层:(i)在一个给定的空间位置融合。(ii)在不同的空间位置,或者一次融合所有。在CNN中,(ii) 是由N x N(N &g…

服务端实时推送技术之SSE(Server-Send Events)

文章目录 前言一、解决方案:1、传统实时处理方案:2、HTML5 标准引入的实时处理方案:3、第三方推送: 二、SSE1.引入库1、客户端: 2.服务端:三、业务实践:能否做到精准投递? 总结 前言…

解决Ubuntu中vscode右键没有create catkin package

右键发现没有这个create catkin package 解决方案: 查了一会发现安装个拓展就可以了 效果:

vue页面基本增删改查

练手项目vue页面 新手前端轻喷: 效果如下 1、2两个部分组成: 对应代码中 element-ui中的 el-form 和 el-table 照着抄呗,硬着头皮来! 建议:认真读一遍你用的组件 这篇文章烂尾了,对不起大家

element-plus日期选择器2次封装

预期效果 官网默认样式&#xff1a; 修改后的样式&#xff1a; 代码实现 DatePicker.vue <template><div class"date-picker-container"><el-date-picker v-model"date" change"handleChange" type"date" value-for…

抓住母亲节销售机会:Shopee 平台选品策略大揭秘

母亲节&#xff0c;作为一个重要的购物节日&#xff0c;为卖家带来了巨大的销售机会。在Shopee这样的电商平台上&#xff0c;如何通过有效的选品策略吸引消费者、提高销量呢&#xff1f;下面将介绍一些关键策略&#xff0c;帮助卖家在母亲节期间实现销售突破。 先给大家推荐一…

植隆业务中台和金蝶云星空单据接口对接

植隆业务中台和金蝶云星空单据接口对接 源系统:金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用框架等&#xff0c;有效支持企业的运…

Linux——信号(2)

在上一张博客我们介绍了Linux中信号的概念和信号是如何产生的&#xff0c;虽然信号 有多种产生方式&#xff0c;但是最终只能由操作系统给对应进程发送特定信号。现在 我将更加规范的介绍Linux中的信号。上一章的遗留问题 我们上一章中在观察信号的默认处理的时候发现终止信号…