目录
Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502
个人主页:https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421
欢迎志同道合者一起交流学习,我的QQ:94509325/微信号
数组合并排序(Array Merge Sort)算法是一种效率较高的排序算法,它的主要思想是将数组分成两半,分别对每一半进行排序,然后再将这两半合并成一个有序的数组。常见的应用场景如下:
1、数据库管理:数据库中经常需要对大量数据进行排序,例如,按照日期、姓名、年龄等字段进行排序。
2、网络数据包排序:在网络通信中,数据包可能来自不同的源,需要按照一定的顺序进行排列。
3、文件和文件夹排序:在文件系统中,需要按照文件名、大小、修改时间等信息对文件和文件夹进行排序。
4、数学和科学计算:在数学和科学计算中,经常需要对大量的数值数据进行排序。数组合并排序算法可以用于这些场景,例如,在统计学中对样本数据进行排序,以便进行进一步的分析。
5、图像和视频处理:在图像和视频处理中,可能需要对像素进行排序,以便进行降噪、滤波等操作。
6、机器学习和数据挖掘:在机器学习和数据挖掘中,经常需要对大量的特征值进行排序,以便进行特征选择和模型训练。
7、搜索引擎:在搜索引擎中,合并排序算法可用于对搜索结果进行排序。通过根据相关性、点击率等因素对搜索结果进行排序,可以提高用户体验。
8、链表排序:合并排序算法也适用于链表的排序。由于链表的数据结构特性,合并排序算法能够在O(n Log n)时间内对链表进行排序,这在处理链表数据时非常有效。
总之,数组合并排序算法在实际应用中具有广泛的应用场景,其高效的排序性能使得它在处理数学和科学计算、链表排序、文件和文件夹排序、数据库管理以及搜索引擎等领域中发挥着重要作用。
1、合并排序数组1(升序):
- # 1.问题描述
- # 合并两个升序的整数数组A和B,形成一个新的数组,新数组也要有序
- # 2.问题示例
- # 输入A=[1],B=[1],输出[1,1],返回合并后的数组;输入A=[1,2,3,4],B=[2,4,5,6],输出[1,2,2,3,4,4,5,6],返回合并所有元素后的数组
- # 3.代码实现
- class Solution:
- # 参数A: 有序整数数组A
- # 参数B: 有序整数数组B
- # 返回值: 一个新的有序整数数组
- def mergeSortedArray(self, A, B):
- i, j = 0, 0
- C = []
- while i < len(A) and j < len(B):
- if A[i] < B[j]:
- C.append(B[j])
- j += 1
- else:
- C.append(A[i])
- i += 1
- while i < len(A):
- C.append(A[i])
- i += 1
- while j < len(B):
- C.append(B[j])
- j += 1
- return C
- if __name__ == '__main__':
- A = [1, 4, 3]
- B = [1, 2, 3, 5]
- D = [1, 2, 3, 4]
- E = [2, 4, 5, 6]
- solution = Solution()
- print("输入:", A, " ", B)
- print("输出:", solution.mergeSortedArray(A, B))
- print("输入:", D, " ", E)
- print("输出:", solution.mergeSortedArray(D, E))
- # 4.运行结果:
- # 输入: [1, 4, 3] [1, 2, 3, 5]
- # 输出: [1, 4, 3, 1, 2, 3, 5]
- # 输入: [1, 2, 3, 4] [2, 4, 5, 6]
- # 输出: [2, 4, 5, 6, 1, 2, 3, 4]
2、【拓展】合并排序数组2(降序):
2-1、Python:
- # 1.问题描述
- # 合并两个降序的整数数组A和B,形成一个新的数组,新数组也要有序
- # 2.问题示例
- # 输入A=[1],B=[1],输出[1,1],返回合并后的数组;输入A=[1,2,3,4],B=[2,4,5,6],输出[6,5,4,4,3,2,2,1],返回合并所有元素后的数组
- # 3.代码实现
- class Solution:
- def mergeSortedArray(self, A, B):
- i, j = 0, 0
- C = []
- while i < len(A) and j < len(B):
- if A[i] > B[j]:# 此处判断条件调整即可
- C.append(A[i])
- i += 1
- else:
- C.append(B[j])
- j += 1
- while i < len(A):
- C.append(A[i])
- i += 1
- while j < len(B):
- C.append(B[j])
- j += 1
- return C
- if __name__ == '__main__':
- A = [4, 3, 2]
- B = [6, 5, 4, 3]
- D = [4, 3, 2, 1]
- E = [6, 5, 2, 1]
- solution = Solution()
- print("输入:", A, " ", B)
- print("输出:", solution.mergeSortedArray(A, B))
- print("输入:", D, " ", E)
- print("输出:", solution.mergeSortedArray(D, E))
- # 4.运行结果:
- # 输入: [4, 3, 2] [6, 5, 4, 3]
- # 输出: [6, 5, 4, 4, 3, 3, 2]
- # 输入: [4, 3, 2, 1] [6, 5, 2, 1]
- # 输出: [6, 5, 4, 3, 2, 2, 1, 1]
2-2、VBA:
- Rem 调用自定义函数MergeArrays
- Sub MergeSortedArray()
- Dim A() As Variant
- Dim B() As Variant
- Dim C() As Variant
- Dim D() As Variant
- Dim E() As Variant
-
- A = Array(4, 3, 2)
- B = Array(6, 5, 4, 3)
- D = Array(4, 3, 2, 1)
- E = Array(6, 5, 2, 1)
-
- C = MergeArrays(A, B)
-
- Debug.Print "输入: "; Join(A, ", "), " ", Join(B, ", ")
- Debug.Print "输出: "; Join(C, ", ")
-
- C = MergeArrays(D, E)
-
- Debug.Print "输入: "; Join(D, ", "), " ", Join(E, ", ")
- Debug.Print "输出: "; Join(C, ", ")
- End Sub
- Rem 实现数组合并排序的自定义函数
- Function MergeArrays(A() As Variant, B() As Variant) As Variant
- Dim i As Long, j As Long, k As Long
- Dim C() As Variant
-
- ReDim C(1 To UBound(A) + UBound(B) + 2) '空数组C的上限需要加2,那是因为数组A/B的下限都是从0开始的
-
- i = 0
- j = 0
- k = 1
-
- While i <= UBound(A) And j <= UBound(B)
- If A(i) > B(j) Then
- C(k) = A(i)
- i = i + 1
- Else
- C(k) = B(j)
- j = j + 1
- End If
- k = k + 1
- Wend
-
- While i <= UBound(A)
- C(k) = A(i)
- i = i + 1
- k = k + 1
- Wend
-
- While j <= UBound(B)
- C(k) = B(j)
- j = j + 1
- k = k + 1
- Wend
-
- ReDim Preserve C(1 To k - 1)
- MergeArrays = C
- End Function
注意:2-2中的代码需粘贴到你的VBA编辑器中,并调用MergeArrays函数来对合并数组进行降序,且结果在立即窗口中展现出来。
3、相关文章:
3-3、 Python-VBA编程500例-004(入门级)
3-4、Python-VBA编程500例-005-01(入门级)
Python算法之旅:http://iyenn.com/rec/1699032.html?spm=1001.2014.3001.5502
个人主页:https://blog.csdn.net/ygb_1024?spm=1010.2135.3001.5421
欢迎志同道合者一起交流学习,我的QQ:94509325/微信号:



评论记录:
回复评论: