# Bubble Sort - Accending and Deccending Order ?

Hello,

I need some help on figuring out how to use a bubble sort method, to arrange all the numbers that a user enters in for (Number[x]) , in accending and deccending order.

Any help would be greatly appreciated.

-----------------------------

Program AccArray;

Uses CRT, dos;

Var   Number: array [1..5] of integer;
Arr: array [1..100] of integer;
numbers,numtotal,x,prevnumber,max,i,j:integer;
ans,Yes,No:char;

Begin

Repeat

clrscr;

numtotal:= 0 ;

Repeat
write('How many numbers (maximum = 100)? ') ;
writeln;

Begin
If numbers > 100 then
Begin
writeln('ERROR - Please enter a number between 1 and 100') ;
writeln;
End
End;

Begin
If numbers < 1 then
Begin
writeln('ERROR - Please enter a number between 1 and 100' );
writeln;
End
End;

Begin
If numbers < 101 then
If numbers > 0  then
numtotal:= 5;
End;

Until numtotal = 5  ;

For x:= 1 to numbers do
Begin

write('Enter  # ' , x  ,  ' : '  ) ;

End;

writeln;

{

I need some kind of bubble sort code in here, to arrange the numbers I entered for Number[x] in accending and deccending order.

}

writeln;
Write ('Would you like to enter more numbers (Y/N)? ') ;
writeln;

Until ans = 'N' ;

End.
###### Who is Participating?

Systems EngineerCommented:
Program BubbleSort;
Uses
Crt;
Type
PointerToList = ^List;
List = Record
Value: Integer;
PrevItem: PointerToList;
NextItem: PointerToList;
End;
Var
Start,Previous,Current,Finish: PointerToList;
mValue: Integer;

{ Function to count the number of items in the list.}
Function Count_Items: Integer;
Var
I: Integer;
Begin
Current:=Start;
I:=0;
While Current <> Nil Do
Begin
I:=I+1;
Current:=Current^.NextItem;
End;
Count_Items:=I;
End;

{ Procedure to add items into the list }
Begin
{Check If this is the first time the structure is going to be created}
If Current = NIL Then
Begin
New(Current); {Get memory for the data}
With Current^ do  {Fill in the data}
Begin
Value:=NewValue;
NextItem:=NIL; {Since there are any more Up this points NIL}
PrevItem:=NIL  {Since there are any more Down this points NIL}
End;
Start:=Current;
Finish:=Current
End
Else  {Now this is not the first time}
Begin
New(Finish);
Finish^.PrevItem:=Current; {Current <- Finish}
Finish^.NextItem:=NIL;     {Finish -> Nil}
Current^.NextItem:=Finish; {Current -> Finish}
Current:=Finish;       {Current:=Finish}
With Current^ do  {Fill in the data}
Begin
Value:=NewValue;
End
End
End;

{ Procedure to sort the list using the bubble sort method }
Procedure Sort_List;
Var
Index1,Index2: Integer;
MaxNum: Integer;

Procedure ChangePlaces(Var Prev,Curr: PointerToList);
Var
Temp: Integer;
Begin
Temp:=Prev^.Value;
Prev^.Value:=Curr^.Value;
Curr^.Value:=Temp;
End;

Begin
MaxNum:=Count_Items;
Previous:=Start;
Current:=Finish;
For Index1:=1 To MaxNum-1 Do
Begin
For Index2:=MaxNum DownTo Index1+1 Do
Begin
If Previous^.Value > Current^.Value Then
ChangePlaces(Previous,Current);
Current:=Current^.PrevItem;
End;
Previous:=Previous^.NextItem;
Current:=Finish;
End
End;

{ Procedure to print the list }
Procedure Print_List;
Begin
Current:=Start;
While Current <> Nil Do
Begin
Write(Current^.Value,'  ');
Current:=Current^.NextItem;
End
End;

Procedure Dispose_All;
Begin
Current:=Start;
While Current^.NextItem <> Nil Do
Begin
Previous:=Current;
Current:=Current^.NextItem;
If Previous <> Nil Then
Dispose(Previous);
End;
Dispose(Current);
End;

{ The main program }
Begin
ClrScr;
Start := Nil;
{ Adding items to the list }
Repeat
Write (' Enter a Number : ');
If mValue <> 0 Then
Until mValue = 0;
{ Sorting the list }
Sort_List;
{ Printing the list }
Print_List;
Dispose_All;
End.
0

Commented:
all you'll need, info/algorithem/source
enjoy
-kay
0

Commented:
Thanks a lot guys, that really helped me out.

Also whatboy, thanks for taking the time to give me an example, I really appreciate it!

0

Author Commented:
opps, wrong user name :)

Thanks again!
0

Author Commented:
The finished version of my program.

Thanks to psychorakz, whatboy, and my good friend Benjamin!

--------------------------
Program AccArray;

Uses CRT, dos;

Var   Number: array [1..5] of integer;
numbers,numtotal,x,prevnumber,max,i,j:integer;
ans,Yes,No:char;

Begin

Repeat

clrscr;

numtotal:= 0 ;

Repeat
write('How many numbers (maximum = 100)? ') ;
writeln;

Begin
If numbers > 100 then
Begin
writeln('ERROR - Please enter a number between 1 and 100') ;
writeln;
End
End;

Begin
If numbers < 1 then
Begin
writeln('ERROR - Please enter a number between 1 and 100' );
writeln;
End
End;

Begin
If numbers < 101 then
If numbers > 0  then
numtotal:= 5;
End;

Until numtotal = 5  ;

For x:= 1 to numbers do
Begin

write('Enter  # ' , x  ,  ' : '  ) ;

End;

writeln;

Begin
for i:= 1 to 100 do
for x:= 1 to numbers do
if number[x] = i then
writeln('Ascending Order - Array  ' , x , ' equals ' , i );
End;

writeln;

Begin
for i:= 100 downto 1 do
for x:= 1 to numbers do
if number[x] = i then
writeln('Descending Order - Array  ' , x , ' equals ' , i );
End;

writeln;
Write ('Would you like to enter more numbers (Y/N)? ') ;
writeln;

Until ans = 'N' ;

End.

0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.