Bubble Sort Problem 
	 
	
		| Author | 
		Message | 
	 
		 
		gitoxa
 
  
 
    
		 | 
		
		
			
				  Posted: Fri May 23, 2008 4:26 pm    Post subject: Bubble Sort Problem  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				I came up with an idea to make a bubble sorter go faster. I read "comb sort" on wikipedia, and this came ot my head, even though comb sort is something else... heh.
 
Anyway, it's a bubble sort that goes both ways, up the array, then down, to lessen the time it takes to move small numbers from high indices to low ones.  It works fine, until I try around 300 numbers.  At some point, it just stops even though the numbers are not in order.
 
 
I've been staring at it for a while, with no solution becoming apparent. You guys see something I'm missing?
 
 
	  | code: | 	 		  %Swaps two numbers in an array.
 
procedure Swap_Nums (var NumList : array 1 .. * of int, Temp1, Temp2 : int)
 
    var Temp : int
 
    Temp := NumList (Temp1)
 
    NumList (Temp1) := NumList (Temp2)
 
    NumList (Temp2) := Temp
 
end Swap_Nums
 
 
%Sorts an array of numbers, using the bubble sort method.
 
procedure Bubble_Sort2_Nums (var NumList : array 1 .. * of int, NumNums : nat1)
 
    var Done : boolean
 
    var Temp : int
 
    loop
 
        Done := true
 
        for Forward : 1 .. NumNums - 1
 
            if NumList (Forward) > NumList (Forward + 1) then
 
                Swap_Nums (NumList, Forward, Forward + 1)
 
                Done := false
 
            end if
 
        end for
 
        if ~Done then
 
            Done := true
 
            for decreasing Backward : NumNums .. 2
 
                if NumList (Backward) < NumList (Backward - 1) then
 
                    Swap_Nums (NumList, Backward, Backward - 1)
 
                    Done := false
 
                end if
 
            end for
 
        end if
 
        exit when Done
 
    end loop
 
end Bubble_Sort2_Nums  | 	  
 
 
	  | code: | 	 		  %Main
 
const MAXNUMS := 300
 
var Numbers : array 1 .. MAXNUMS of int
 
for Create : 1 .. MAXNUMS
 
    randint (Numbers (Create), 1, 1000)
 
end for
 
Bubble_Sort2_Nums (Numbers, MAXNUMS)
 
for Output : 1 .. MAXNUMS - 1
 
    if Numbers(Output) > Numbers(Output+1) then
 
        put "Fail"..
 
    end if
 
end for  | 	 
  | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
		 
		Sponsor Sponsor 
		 
  
		 | 
		
 | 
	 
	 
		  | 
	 
				 
		richcash
 
 
 
    
		 | 
		
		
			
				  Posted: Fri May 23, 2008 6:20 pm    Post subject: Re: Bubble Sort Problem  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				Your NumNums parameter is declared as nat1.
 
 
nat1 is 1-byte so its range is 0-255. If you pass an argument that is greater than that it will basically be modulo-ed by 256 so your for loops will be incorrect. You should change the type of your parameter to support more bytes. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		gitoxa
 
  
 
    
		 | 
		
		
			
				  Posted: Fri May 23, 2008 6:42 pm    Post subject: RE:Bubble Sort Problem  | 
	
				
				 | 
			 
			 
				
  | 
			 
			
				| Oh, okay, thanks. Thought I'd gotten all the variables fixed. | 
			 
			
				 | 
			 
		  | 
	 
	 
		 | 
		
		 | 
	 
	  
		  | 
	 
				 
		 | 
	 
 
	
	
	 
	
	 |