Excel Sort的多key稳定排序算法,你了解的有多少方法?

简介: <p>  一般说,由Excel中的单元格区域数据对象构成的二维数组,可以直接使用工作表排序方法。</p><p>  不仅速度快,而且无需读入、写出操作。</p><p>  但是,默认工作表排序方法一次只能使用3个key、所以如果有较多key需要排序时,</p><p>  可以使用VBA循环代码,一次排1列,逆序循环排序后得到结果。</p><p>  PS:注意必须逆序操

  一般说,由Excel中的单元格区域数据对象构成的二维数组,可以直接使用工作表排序方法。

  不仅速度快,而且无需读入、写出操作。

  但是,默认工作表排序方法一次只能使用3个key、所以如果有较多key需要排序时,

  可以使用VBA循环代码,一次排1列,逆序循环排序后得到结果。

  PS:注意必须逆序操作,即、权重最小的列第1个排序,而权重最大的列必须最后一个排序。这个和我们通常的习惯是相反的,需要注意。

  示例代码如下:

  Sub test1() Dim ar, sr, sr2, i&, j&, tms#

  '假设待排序原始数据是在A1开始的多行、7列区域中 sr=Array(1, 3, 5, 7) '需要排序的列的权重顺序 sr2=Array(1, 2, 2, 1) '需要排序的列的升降顺序(1为升序、2为降序) Application.ScreenUpdating=False '禁止刷屏 For j=UBound(sr) To 0 Step -1 '逆序循环 [a1].Sort [a1].Offset(, sr(j) - 1), sr2(j) '每次排序1列 Next Application.ScreenUpdating=True End Sub

  但是,如果是VBA过程中生成的VBA内存二维数组需要排序,那么用工作表排序方法就比较麻烦,需要先把二维数组写入工作表,然后排序,然后再读入VBA……

  另外,如果是超过65536行甚至几十万、几百万的数据需要排序,

  那工作表方法就不能用了,读写数据就需大量时间。

  因此,虽然不是很常用,但还是需要一种直接对VBA内存数组进行排序的算法。

  VBA排序算法有很多,但基本上都是一维数组排序。

  即使简单改写一下能用于二维数组,但对于稳定的多key排序,就无法解决。

  因为,稳定排序的冒泡算法速度非常之慢,而速度较快的快速排序是不稳定排序算法,

  所以多key排序的结果就会出错。

  小伙伴,大家一起学习Excel VBA知识,一起进步。同时欢迎大家帮忙转发并关注,谢谢大家的支持!

目录
相关文章
|
2月前
|
存储 算法 Java
解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用
在Java中,Set接口以其独特的“无重复”特性脱颖而出。本文通过解析HashSet的工作原理,揭示Set如何利用哈希算法和equals()方法确保元素唯一性,并通过示例代码展示了其“无重复”特性的具体应用。
50 3
|
6月前
|
数据采集 机器学习/深度学习 算法
机器学习方法之决策树算法
决策树算法是一种常用的机器学习方法,可以应用于分类和回归任务。通过递归地将数据集划分为更小的子集,从而形成一棵树状的结构模型。每个内部节点代表一个特征的判断,每个分支代表这个特征的某个取值或范围,每个叶节点则表示预测结果。
179 1
|
2月前
|
算法 索引
HashMap扩容时的rehash方法中(e.hash & oldCap) == 0算法推导
HashMap在扩容时,会创建一个新数组,并将旧数组中的数据迁移过去。通过(e.hash & oldCap)是否等于0,数据被巧妙地分为两类:一类保持原有索引位置,另一类索引位置增加旧数组长度。此过程确保了数据均匀分布,提高了查询效率。
44 2
|
2月前
|
数据处理 Python
Python 高级技巧:深入解析读取 Excel 文件的多种方法
在数据分析中,从 Excel 文件读取数据是常见需求。本文介绍了使用 Python 的三个库:`pandas`、`openpyxl` 和 `xlrd` 来高效处理 Excel 文件的方法。`pandas` 提供了简洁的接口,而 `openpyxl` 和 `xlrd` 则针对不同版本的 Excel 文件格式提供了详细的数据读取和处理功能。此外,还介绍了如何处理复杂格式(如合并单元格)和进行性能优化(如分块读取)。通过这些技巧,可以轻松应对各种 Excel 数据处理任务。
232 16
|
2月前
|
搜索推荐 Shell
解析排序算法:十大排序方法的工作原理与性能比较
解析排序算法:十大排序方法的工作原理与性能比较
60 9
|
2月前
|
存储 算法 Java
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
前缀(波兰)表达式、中缀表达式和后缀(逆波兰)表达式的基本概念、计算机求值方法,以及如何将中缀表达式转换为后缀表达式,并提供了相应的Java代码实现和测试结果。
90 0
数据结构与算法学习八:前缀(波兰)表达式、中缀表达式、后缀(逆波兰)表达式的学习,中缀转后缀的两个方法,逆波兰计算器的实现
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之String常用操作方法
这篇文章详细介绍了JavaScript中字符串的基本操作,包括创建字符串、访问特定字符、字符串的拼接、位置查找、大小写转换、模式匹配、以及字符串的迭代和格式化等方法。
JS算法必备之String常用操作方法
|
4月前
|
JavaScript 算法 前端开发
JS算法必备之Array常用操作方法
这篇文章详细介绍了JavaScript中数组的创建、检测、转换、排序、操作方法以及迭代方法等,提供了数组操作的全面指南。
JS算法必备之Array常用操作方法
|
4月前
|
搜索推荐 算法 Java
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
该博客文章通过UML类图和Java源码示例,展示了如何使用适配器模式将QuickSort类和BinarySearch类的排序和查找功能适配到DataOperation接口中,实现算法的解耦和复用。
47 1
现有一个接口DataOperation定义了排序方法sort(int[])和查找方法search(int[],int),已知类QuickSort的quickSort(int[])方法实现了快速排序算法
|
4月前
|
算法 定位技术 vr&ar
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达
634 0
一文了解PnP算法,python opencv中的cv2.solvePnP()的使用,以及使用cv2.sovlePnP()方法标定相机和2D激光雷达