不看不看老师的讲解《冒泡排序法原理》:http://www.excelpx.com/forum.php?mod=viewthread&tid=69568
单元格中排序,我们可以去看帮助,学用Range.Sort 方法。但如果必须在一维数组里排序的话,除此一路,还有没有密道呀? PS:也许告诉我我也不懂,但还是想问问,满足下好奇心,见见好玩的[em11]
想起了我的那堂试讲课。代码全给你,自己去试试看。 Sub 系统排序() Dim MyRng As Range Set MyRng = Range("A9:A21") MyRng.Sort Key1:=MyRng.Cells(1, 1), Order1:=xlAscending, Header:=xlYes, _ MatchCase:=False, Orientation:=xlSortColumns End
Sub Sub 随机数据() Dim i% Randomize For i = 10 To 21 Cells(i, 1) = Int(Rnd * 1000) + 1000 Next i End
Sub Sub 冒泡排序() Dim i As
Integer, Temp As
Variant Dim arr() As
Variant Dim OK As
Boolean arr = Application.Transpose(Range("A10:A21")) Do OK = True For i = UBound(arr) To 2 Step -1 If arr(i - 1) > arr(i) Then Temp = arr(i - 1) arr(i - 1) = arr(i) arr(i) = Temp OK = False End
If Next i Loop
Until OK Range("A10:A21") = Application.Transpose(arr) End
Sub Sub 选择排序() Dim i As
Integer, j As
Integer Dim min As
Integer, Temp As
Variant Dim arr() As
Variant arr = Application.Transpose(Range("A10:A21")) For i = 1 To
UBound(arr) - 1 min = i For j = i + 1 To
UBound(arr) If arr(j) < arr(min) Then min = j Next j If min <> i Then Temp = arr(min) arr(min) = arr(i) arr(i) = Temp End
If Next i Range("A10:A21") = Application.Transpose(arr) End
Sub Sub 计数排序() Dim counts() As
Variant, i As
Integer, j As
Integer Dim next_index As
Integer Dim min_value As
Integer, max_value As
Integer Dim arr() As
Variant arr = Application.Transpose(Range("A10:A21")) min_value = WorksheetFunction.min(arr) max_value = WorksheetFunction.max(arr) ReDim counts(min_value To max_value) For i = 1 To
UBound(arr) counts(arr(i)) = counts(arr(i)) + 1 Next i next_index = 1 For i = min_value To max_value For j = 1 To counts(i) arr(next_index) = i next_index = next_index + 1 Next j Next i Range("A10:A21") = Application.Transpose(arr) End
Sub Sub 插入排序() Dim i As
Integer, j As
Integer, Temp As
Variant Dim arr() As
Variant arr = Application.Transpose(Range("A10:A21")) For i = 1 To
UBound(arr) Temp = arr(i) j = i - 1 Do If j < 1 Then
Exit
Do If arr(j) <= Temp Then
Exit
Do arr(j + 1) = arr(j) j = j - 1 Loop If j <> (i - 1) Then arr(j + 1) = Temp Next i Range("A10:A21") = Application.Transpose(arr) End
Sub Sub 希尔排序() Dim i As
Integer, j As
Integer Dim inc As
Integer, Temp As
Variant Dim arr() As
Variant arr = Application.Transpose(Range("A10:A21")) inc = 1 Do
While inc <= UBound(arr) - 1 inc = 3 * inc + 1 Loop Do
While inc > 1 inc = inc \ 3 For i = 1 + inc To
UBound(arr) Temp = arr(i) j = i - inc Do If j < inc Then
Exit
Do If arr(j) <= Temp Then
Exit
Do arr(j + inc) = arr(j) j = j - inc Loop If j <> (i - inc) Then arr(j + inc) = Temp Next Loop Range("A10:A21") = Application.Transpose(arr) End
Sub Sub 快速排序(ByRef InputArray As
Variant, ByVal lb As
Long, ByVal ub 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 Sub 快速排序主程序() Dim arr() As
Variant arr = Application.Transpose(Range("A10:A21")) 快速排序 arr, 1, UBound(arr) Range("A10:A21") = Application.Transpose(arr) End
Sub
|