81 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			81 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								title: Freecodecamp Algorithm Bubble Sort Guide
							 | 
						|||
| 
								 | 
							
								---
							 | 
						|||
| 
								 | 
							
								Bubble sort is a simple sorting algorithm. This sorting algorithm is comparison based algorithm in which each pair of adjacent elements is  
							 | 
						|||
| 
								 | 
							
								compared and elements are swapped if they are not in order. This algorithm does sorting in-place i.e. it does not creates a new array while  
							 | 
						|||
| 
								 | 
							
								carrying out the sorting process.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### Example
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								<a href='http://www.sorting-algorithms.com/bubble-sort' target='_blank' rel='nofollow'>Animation of BubbleSort</a>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    array = <a href='https://repl.it/CXif' target='_blank' rel='nofollow'>5, 1, 4, 2, 8]
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    First Pass:
							 | 
						|||
| 
								 | 
							
								    ( 5 1 4 2 8 ) –> ( 1 5 4 2 8 ), Here, algorithm compares the first two elements, and swaps since 5 > 1.
							 | 
						|||
| 
								 | 
							
								    ( 1 5 4 2 8 ) –>  ( 1 4 5 2 8 ), Swap since 5 > 4
							 | 
						|||
| 
								 | 
							
								    ( 1 4 5 2 8 ) –>  ( 1 4 2 5 8 ), Swap since 5 > 2
							 | 
						|||
| 
								 | 
							
								    ( 1 4 2 5 8 ) –> ( 1 4 2 5 8 ), Now, since these elements are already in order (8 > 5), algorithm does not swap them.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    Second Pass:
							 | 
						|||
| 
								 | 
							
								    ( 1 4 2 5 8 ) –> ( 1 4 2 5 8 )
							 | 
						|||
| 
								 | 
							
								    ( 1 4 2 5 8 ) –> ( 1 2 4 5 8 ), Swap since 4 > 2
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –>  ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								    Now, the array is already sorted, but our algorithm does not know if it is completed. The algorithm needs one whole pass without any
							 | 
						|||
| 
								 | 
							
								    swap to know it is sorted.
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    Third Pass:
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								    ( 1 2 4 5 8 ) –> ( 1 2 4 5 8 )
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### C++ Implementation
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    // Function to implement bubble sort
							 | 
						|||
| 
								 | 
							
								    void bubble_sort(int array[], int n)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        // Here n is the number of elements in array
							 | 
						|||
| 
								 | 
							
								        int temp;
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								        for(int i = 0; i < n-1; i++)
							 | 
						|||
| 
								 | 
							
								    {
							 | 
						|||
| 
								 | 
							
								        // Last i elements are already in place
							 | 
						|||
| 
								 | 
							
								        for(int j = 0; j < n-i-1; j++)
							 | 
						|||
| 
								 | 
							
								        {
							 | 
						|||
| 
								 | 
							
								            if (array[j] > array[j+1])
							 | 
						|||
| 
								 | 
							
								            {
							 | 
						|||
| 
								 | 
							
								                // swap elements at index j and j+1
							 | 
						|||
| 
								 | 
							
								                temp = array[j];
							 | 
						|||
| 
								 | 
							
								                array[j] = array[j+1];
							 | 
						|||
| 
								 | 
							
								                array[j+1] = temp;
							 | 
						|||
| 
								 | 
							
								            }
							 | 
						|||
| 
								 | 
							
								        }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								    }
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								:rocket: [Run Code</a> #### Python Implementation  
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    def bubble_sort(arr):
							 | 
						|||
| 
								 | 
							
								        exchanges = True # A check to see if the array is already sorted so that no further steps gets executed
							 | 
						|||
| 
								 | 
							
								        i = len(arr)-1
							 | 
						|||
| 
								 | 
							
								        while i > 0 and exchanges:
							 | 
						|||
| 
								 | 
							
								           exchanges = False
							 | 
						|||
| 
								 | 
							
								           for j in range(i):
							 | 
						|||
| 
								 | 
							
								               if arr<a href='https://forum.freecodecamp.com/images/emoji/emoji_one/rocket.png?v=3 ":rocket:"' target='_blank' rel='nofollow'>j]>arr[j+1]:
							 | 
						|||
| 
								 | 
							
								                   exchanges = True
							 | 
						|||
| 
								 | 
							
								                   arr[j], arr[j+1] = arr[j+1], arr[j]
							 | 
						|||
| 
								 | 
							
								           i -= 1
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								    arr = [5,3,23,1,43,2,54]
							 | 
						|||
| 
								 | 
							
								    bubble_sort(arr)
							 | 
						|||
| 
								 | 
							
								    print(arr) # Prints [1, 2, 3, 5, 23, 43, 54]
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								 <a href='https://repl.it/CW0M/1' target='_blank' rel='nofollow'>Run Code</a>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								#### <a href='https://www.freecodecamp.com/videos/big-o-notation-what-it-is-and-why-you-should-care' target='_blank' rel='nofollow'>Complexity of Algorithm</a>
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**Worst and Average Case Time Complexity:** O(n*n). Worst case occurs when array is reverse sorted i.e. the elements are in decreasing order
							 | 
						|||
| 
								 | 
							
								
							 | 
						|||
| 
								 | 
							
								**Best Case Time Complexity:** O(n). Best case occurs when array is already sorted.
							 |