Go Premium for a chance to win a PS4. Enter to Win

x
Solved

# How to do a reverse sort (descending) of filenames using Quicksort function?

Posted on 2006-10-26
Medium Priority
1,301 Views
I'm having a problem trying to do a reverse sort (descending order; Z to A; n to 0).
The Quicksort function (mentioned below) does a sort in ascending order (A to Z; 0 to n) and is an excerpt from a C++ book called "Data Abstractions & Structures using C++". I've used the following code to do a sort of filenames/folders in a customized Enhanced Browser Page for IIS 5.0 and WORKS!!! I've tried to manipulate variables within the function to do a reverse sort however I've had no luck....

My question:  How/What do I change the Quicksort function (execerpt below) to sort in descending order (Z to A; n to 0)?

'___________________________________________________________________
Sub QuickSort(vec,loBound,hiBound,SortField)
'==--------------------------------------------------------==
'== Sort a 2 dimensional array on SortField                ==
'==                                                        ==
'== This procedure is adapted from the algorithm given in: ==
'==    ~ Data Abstractions & Structures using C++ by ~     ==
'==    ~ Mark Headington and David Riley, pg. 586    ~     ==
'== Quicksort is the fastest array sorting routine For     ==
'== unordered arrays.  Its big O is  n log n               ==
'==                                                        ==
'== Parameters:                                            ==
'== vec       - array to be sorted                         ==
'== SortField - The field to sort on (2nd dimension value) ==
'== loBound and hiBound are simply the upper and lower     ==
'==   bounds of the array's 1st dimension.  It's probably  ==
'==   easiest to use the LBound and UBound functions to    ==
'==   Set these.                                           ==
'==--------------------------------------------------------==

Dim pivot(),loSwap,hiSwap,temp,counter
Redim pivot (Ubound(vec,2))
'== Two items to sort
if hiBound - loBound = 1 then
if vec(loBound,SortField) > vec(hiBound,SortField) then
Call SwapRows(vec,hiBound,loBound)
End If
End If
0
• 2

LVL 85

Expert Comment

ID: 17816036
if vec(loBound,SortField) < vec(hiBound,SortField) then
0

Author Comment

ID: 17821841

However it still doesn't seem to work. Perhaps I need to change something in the subroutine called "Swaprows"?
The following is the subroutine called within the Quicksort() function:

Parameters being passed into the subroutine:
SwapRows(vec,hiBound,loBound)
-------------------------------------------------------------
Sub SwapRows(ary,row1,row2)
'== This proc swaps two rows of an array
Dim x,tempvar
For x = 0 to Ubound(ary,2)
tempvar = ary(row1,x)
ary(row1,x) = ary(row2,x)
ary(row2,x) = tempvar

Next
0

LVL 44

Accepted Solution

Arthur_Wood earned 750 total points
ID: 17822057
try this change:

Dim pivot(),loSwap,hiSwap,temp,counter
Redim pivot (Ubound(vec,2))
'== Two items to sort
if hiBound - loBound = 1 then
if vec(loBound,SortField) < vec(hiBound,SortField) then
Call SwapRows(vec,loBound,hiBound)
End If
End If

AW
0

Author Comment

ID: 17833631
I got an answer to this question....

Check out the response to my post! http://www.experts-exchange.com/Web/Q_22039210.html

Thanks for the effort and I will offer some points! :)
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Having just graduated from college and entered the workforce, I don’t find myself always using the tools and programs I grew accustomed to over the past four years. However, there is one program I continually find myself reverting back to…R.   So …