|
-
Mar 14th, 2006, 10:14 AM
#1
Thread Starter
New Member
sort function - from ascending to descending
hi
i have this bubblesort sub -
Code:
Sub BubbleSort(List() As Integer)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp As Integer
First = LBound(List)
Last = UBound(List)
For i = First To Last - 1
For j = i + 1 To Last
If List(i) > List(j) Then
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
End Sub
but at the moment it sorts all the elements in ascending order, and i need it biggest element first ie. descending...
any idea how i change it, i guess it would be simple but i suppose it may need completely rewriting
thanks
jimmyp
-
Mar 14th, 2006, 11:50 AM
#2
Addicted Member
Re: sort function - from ascending to descending
You just had to change one sign:
VB Code:
Option Explicit
Sub BubbleSort(List() As Integer)
Dim First As Integer, Last As Integer
Dim i As Integer, j As Integer
Dim Temp As Integer
First = LBound(List)
Last = UBound(List)
For i = First To Last
For j = i + 1 To Last
If List(i) < List(j) Then 'This changed, was ">"
Temp = List(j)
List(j) = List(i)
List(i) = Temp
End If
Next j
Next i
For i = First To Last
Debug.Print List(i)
Next
End Sub
Sub GiveList()
Dim List(0 To 4) As Integer
List(0) = 5
List(1) = 7
List(2) = 1
List(3) = 11
List(4) = 8
Call BubbleSort(List())
End Sub
-
Mar 14th, 2006, 12:08 PM
#3
Re: sort function - from ascending to descending
Here's a sort functionn that allows you to sort either Ascending or Descending. It can also sort a 2D array, based on a selected column.
VB Code:
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' Comments: This function sorts an array based on a column
' number, in either ascending or descending order.
'
' Arguments: OldArray The array to be sorted
' ColNum An optional column number for 2d
' arrays.
' ASC An optional boolean value to sort
' in ASCending or descending order.
'
' Date Developer Action
' --------------------------------------------------------------
' 09/04/05 Declan Kenny Initial version
'
Function SortArray(ByRef OldArray As Variant, Optional ByVal ColNum As Integer = 1, Optional ByVal ASC As Boolean = True)
Dim Sorted As Boolean
Dim ArrayRec As Integer
Dim temp As Variant
Dim ColCount As Integer
Sorted = False
Do While Not Sorted
Sorted = True
If ASC Then
For ArrayRec = 1 To UBound(OldArray, ColNum) - 1
If OldArray(ArrayRec, ColNum) > OldArray(ArrayRec + 1, ColNum) Then
For ColCount = 1 To UBound(OldArray, 2)
temp = OldArray(ArrayRec + 1, ColCount)
OldArray(ArrayRec + 1, ColCount) = OldArray(ArrayRec, ColCount)
OldArray(ArrayRec, ColCount) = temp
Next ColCount
Sorted = False
End If
Next ArrayRec
Else
For ArrayRec = 2 To UBound(OldArray, ColNum)
If OldArray(ArrayRec, ColNum) > OldArray(ArrayRec - 1, ColNum) Then
For ColCount = 1 To UBound(OldArray, 2)
temp = OldArray(ArrayRec - 1, ColCount)
OldArray(ArrayRec - 1, ColCount) = OldArray(ArrayRec, ColCount)
OldArray(ArrayRec, ColCount) = temp
Next ColCount
Sorted = False
End If
Next ArrayRec
End If
Loop
End Function
Declan
Don't forget to mark your Thread as resolved.
Take a moment to rate posts that you think are helpful 
-
Aug 31st, 2007, 12:29 PM
#4
Frenzied Member
Re: sort function - from ascending to descending
Nice work Declan ... even if it is old. However, I tried to use it but found that it is SLOW, SLOW, SLOW !!!
On my machine, sorting 2 columns - the sort column with 10 digit numbers, and one with about 50 characters of text - the function execution time is tightly fit by:
Time (sec) = 0.000002 * NumRows
A few thousand rows and you will be waiting for completion. I have over 28,000 rows in my data set ... it is MUCH faster just to copy the 2 columns into a clean sheet and use the Excel WorksheetFunction sort to do the work in less than a second (even with keeping ScreenUpdating ON!)
This is NOT a criticism ... just a hint to add to the bottom of this thread for anybody who discovers it in the future. As always, thanks Declan for your great support on this forum.
Blessings in abundance,
All the Best,
& ENJOY!
Art . . . . Carlisle, PA . . USA
Posting Permissions
- You may not post new threads
- You may not post replies
- You may not post attachments
- You may not edit your posts
-
Forum Rules
|
Click Here to Expand Forum to Full Width
|