VBA中几种常用的排序方法

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

9003 9391 9842 9903 9970 9995
Sub 快速排序主程序() Dim Arr() As Variant Arr = Application.Transpose(Range("A10:A21")) 快速排序 Arr, 1, UBound(Arr) Range("A10:A21") = Application.Transpose(Arr) End Sub
从hi向前 1 4 5 2 1 2 5 从hi向前 1 2 3 4 5 3 3
从lo向后 1 4 5 2 4 2 5
对于大量随机数据相对较快。
一、
排序原理
该方法采用递归,基本思路如下: 1、先取出数据的中间数,将比该数小的数放在该数之前,将比该数大的数据放在该数之后 2、由上述排序之后分为两个区域,即大数区域和小数区域再分别进行上述操作 3、重复上述步骤,直至分解区域仅存一个数据。
二、
数据 373 780 971 1377 1442 1492 1652 1848 2071 2636 2786 3465 3529 4035 4264 4401 4861 4956 5512 5750 5863 5884 6592 6679 6794 6842 7421 7525 7543 7633 7716 7952 8404 8635
三、
算法演示
假设以下五个数进行排序 5,4,3,2,1
Temp=3 第一位 第二位 第三位 第四位 第五位 lo hi Temp=3 第一位 第二位 第三位 第二轮 第四位 第五位 lo hi
初始值 5 4 3 2 1 1 5 从hi向前 1 2 5 2 4 3 4
中间位赋值 5 4 5 2 1 1 5 从lo向后 1 2 5 5 4 3 4
示例
代码: Sub 快速排序(ByRef InputArray As Variant, ByVal lb As Long Dim Temp As Variant, hi As Integer, low As Integer, i As Integer If lb >= ub Then Exit Sub i = Int((ub + lb) / 2) Temp = InputArray(i) InputArray(i) = InputArray(lb) lo = lb hi = ub Do Do While InputArray(hi) >= Temp hi = hi - 1 If hi <= lo Then Exit Do Loop If hi <= lo Then InputArray(lo) = Temp Exit Do End If InputArray(lo) = InputArray(hi) lo = lo + 1 Do While InputArray(lo) < Temp lo = lo + 1 If lo >= hi Then Exit Do Loop If lo >= hi Then lo = hi InputArray(hi) = Temp Exit Do End If InputArray(hi) = InputArray(lo) Loop 快速排序 InputArray, lb, lo - 1 快速排序 InputArray, lo + 1, ub End Sub
第一轮
第二轮
Temp=3 第一位 第二位 第三位 第四位 第五位 lo hi Temp=3 第一位 第二位 第三位 第四位 第五位 lo hi
四、
算法总结
该排序方法采用递归方式,将数据大致排序后再进入小块进行排序,对于大量随机数据相对较
快速排序
该数大的数据Βιβλιοθήκη Baidu在该数之后; 别进行上述操作;
yVal lb As Long, ByVal ub As Long) As Integer, i As Integer
相关文档
最新文档