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. |