Selection Sort in descending order HELP!!

C

Clinto

Hello,

I am using the below code to sort an array in ascending order, I also
need to sort in descending order. I cannot get figure out what has to
change to make this happen. If someone could *point me in the right
direction, it would be appreciated. pLast is (comes from another
function) the largest element in the array and paAry is the array
being passed

/* ==================== selectSort ====================
Sorts by selecting smallest element in unsorted
portion of the array and exchanging it with element
at the beginning of the unsorted list.
Pre array must contain at least one item
pLast is pointer to last element in array
Post array rearranged smallest to largest
*/
void selectSort (int* pAry, int* pLast)
{
// Local Declarations
int* pWalker;
int* pSmallest;

// Statements
for (pWalker = pAry; pWalker < pLast; pWalker++)
{
pSmallest = smallest (pWalker, pLast);
exchange (pWalker, pSmallest);
} // for
return;
} // selectSort



/* ==================== smallest ====================
Find smallest element starting at current pointer.
Pre pAry points to first unsorted element
Post smallest element identified and returned
*/
int* smallest (int* pAry, int* pLast)
{
// Local Declarations
int* pLooker;
int* pSmallest;

// Statements
for (pSmallest = pAry, pLooker = pAry + 1;
pLooker <= pLast;
pLooker++)
if (*pLooker < *pSmallest)
pSmallest = pLooker;

return pSmallest;
} // smallest

/* ====================== exchange ====================
Given pointers to two array elements, exchange them
Pre p1 & p2 are pointers to exchange values
Post exchange is completed
*/
void exchange (int* p1, int* p2)
{
// Local Declarations
int temp;

// Statements
temp = *p1;
*p1 = *p2;
*p2 = temp;
return;
} // exchange
 
R

Richard Heathfield

Clinto said:
Hello,

I am using the below code to sort an array in ascending order, I also
need to sort in descending order.

By "ascending order" you mean "smallest first". Think about how the code
determines which is smallest. Can you persuade it to change its mind?
Perhaps by using an operator other than < ? Or maybe by switching a couple
of operands around?
 
A

Army1987

Hello,

I am using the below code to sort an array in ascending order, I also
need to sort in descending order. I cannot get figure out what has to
change to make this happen. If someone could *point me in the right
direction, it would be appreciated.
Have you tried to do the most obvious thing to do, namely writing
a greatest() function identical to smallest() except using a > in
the place of a <, and using it instead of smallest()? If so, what
was wrong with the results you got? If not, did you bother to try
and figure out how those functions work?
 
C

Clinto

Have you tried to do the most obvious thing to do, namely writing
a greatest() function identical to smallest() except using a > in
the place of a <, and using it instead of smallest()? If so, what
was wrong with the results you got? If not, did you bother to try
and figure out how those functions work?
--
Army1987 (Replace "NOSPAM" with "email")
A hamburger is better than nothing.
Nothing is better than eternal happiness.
Therefore, a hamburger is better than eternal happiness.

I did make a new selectsort() function and similar function to
smallest() which i called largest() and switched the <. I made changes
in the selectsort function as well. (maybe that is my problem) My
output was the same as what was passed to it. So I know I am doing
somehthing incorrectly. I see what the function does to get the
smallest items in the array and sort them in ascending order. I just
do not quite understand how to change it to descending order. I am
sure you can tell this is a homework assignment so I am not asking
anyone to do it for me.

I just need some help as I have spent too many hours on it already.
Thanks for all input, I will work with the suggestions given thus far.
I will rewrite the functions later today. I have church this morning.
 
C

Clinto

I did make a new selectsort() function and similar function to
smallest() which i called largest() and switched the <. I made changes
in the selectsort function as well. (maybe that is my problem) My
output was the same as what was passed to it. So I know I am doing
somehthing incorrectly. I see what the function does to get the
smallest items in the array and sort them in ascending order. I just
do not quite understand how to change it to descending order. I am
sure you can tell this is a homework assignment so I am not asking
anyone to do it for me.

I just need some help as I have spent too many hours on it already.
Thanks for all input, I will work with the suggestions given thus far.
I will rewrite the functions later today. I have church this morning.- Hide quoted text -

- Show quoted text -

I re-wrote the sort functions and finally got it to work:

5 numbers read.

Your data sorted are:

Ascending Original Descending

14 26 57
26 14 41
33 57 33
41 33 26
57 41 14

End of List

Thanks for the assistance.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads

selection-sort in C 22
Sort in the Descending Order 7
Selection-Sort in C 35
insertion sort in C 14
Bubble Sort in C 48
Insertion Sort 4
Sort in descending order with index 2
Sort in the Descending Orger with Index 1

Members online

Forum statistics

Threads
473,766
Messages
2,569,569
Members
45,045
Latest member
DRCM

Latest Threads

Top