diff --git a/bingo_sort.py b/bingo_sort.py new file mode 100644 index 00000000..c26de42b --- /dev/null +++ b/bingo_sort.py @@ -0,0 +1,56 @@ +# Python implementation of Bingo Sort. +# This algorithm is derived from simple +# Selection Sort, but runs on average and worst case +# O(m * n) where m=number of distinct elements and N +# is the size of the array or list. Performs best when +# repetition of every element is high in the array. +# Peforms better than quick sort, merge and heap sort +# if m < log n. + +# Function to print the Array +def printArray(arr): + print("Sorted Array: ",end="") + for ele in arr: + print(ele, end=" ") + print() + +# function for Sorting the Array +def bingoSort(arr, size): + + # Finding the smallest element From the Array + bingo = min(arr) + + # Finding the largest element from the Array + largest = max(arr) + nextBingo = largest + nextPos = 0 + while bingo < nextBingo: + + # Will keep the track of the element position to + # shifted to their correct position + startPos = nextPos + for i in range(startPos, size): + if arr[i] == bingo: + arr[i], arr[nextPos] = arr[nextPos], arr[i] + nextPos += 1 + + # Here we are finding the next Bingo Element + # for the next pass + elif arr[i] < nextBingo: + nextBingo = arr[i] + bingo = nextBingo + nextBingo = largest + + # Printing the ELements of the Sorted Array + printArray(arr) + +arr = [ 5, 4, 8, 5, 4, 8, 5, 4, 4, 4 ] +bingoSort(arr, size = len(arr)) + +arr2 = [ 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 ] +bingoSort(arr2, size = len(arr2)) + +arr3 = [ 0, 1, 0, 1, 0, 1 ] +bingoSort(arr3, size = len(arr3)) + +