该算法参考的严蔚敏老师97版 C语言版的快排算法(没有做枢轴的优化),使用了递归调用的方式。

代码经调试运行无误(控制台程序)。

1 Dim arr
2  Dim low
3 Dim high
4 arr = Array(1,99,58.32,8,7,3,4.18,2,6,14,65,9,23,43,78,9)
5
6 low = Lbound(arr)
7 high = Ubound(arr)
8
9 '===调用快速排序===
10 QuickSort arr,low,high
11
12 For i = 0 to Ubound(arr)
13 Response.Write(arr(i)&"  ")
14 Next
15
16 '===========用VBScript实现快速排序======开始============
17 'Author:falconshh 2011.05.30
18 'arr:待排数组,下标从0....n-1
19 'low:数组最低端下标
20 'high:数组最高端下标
21 Sub QuickSort(arr,low,high)
22 Dim pivotPos '枢轴位置
23 If low < high Then
24 pivotPos = CInt(Partition(arr,low,high))
25 QuickSort arr,low,pivotPos-1 '对低端子数组排序
26 QuickSort arr,pivotPos+1,high '对高端子数组排序
27 End if
28 End Sub
29
30 '分割数据
31 Function Partition(arr,low,high)
32 Dim pivot '定义枢轴
33 pivot = arr(low) '取第一个记录作为枢轴
34 i = low
35 j = high
36
37 Do While (i < j)
38 Do While (i < j and arr(j) >= pivot)
39 j = j - 1
40 Loop
41
42 arr(i) = arr(j) '将枢轴移到低端
43
44 Do While (i < j and arr(i) <= pivot)
45 i = i + 1
46 Loop
47 arr(j) = arr(i) '将枢轴移到高端
48 Loop
49
50 arr(i) = pivot '将枢轴放置到正确的位置(中间点)
51 Partition = i '返回枢轴的位置
52 End Function
53 '===========用VBScript实现快速排序======结束============

排序结果如下:

1  2  3  4.18  6  7  8  9  9  14  23  43  58.32  65  78  99  

posted on 2011-05-30 13:13  香椿炒鸡蛋  阅读(605)  评论(0)    收藏  举报