#pyalo
This project implements some of popular search and sort algorithms. This is on-going project; more algorithms and improvements will be added in the future.
##Documentation
###Substring search
There are 3 substring search algorithms are currently implemented which are Knuth-Morris-Patt, Boyer More and Rabin Karp.
####Knuth-Morris-Patt algorithm kmp_search(text, pattern) Return the index of the first occurrence of the pattern in the text. If the pattern does not exist, return -1. #####Example
>>> from pyalgo import search
>>> text = "ABBAACBCB"
>>> search.kmp_search(text, "ACDCB")
4
>>> search.kmp_search(text, "EDEF")
>>> -1
####Rabin-karp algorithm rabin_karp_search(text, pattern, q=37) Return the index of the first occurrence of the pattern in the text. If the pattern does not exist, return -1. q is the modular constant. Setting q to a large prime to avoid collisions. Default value of q is 37 #####Example
>>> from pyalgo import search
>>> text = "ABBAACBCB"
>>> search.rabin_karp_search(text, "ACDCB")
4
>>> search.rabin_karp_search(text, "EDEF")
>>> -1
####Boyer-Moore algorithm boyer_moore_search(text, pattern) Return the index of the first occurrence of the pattern in the text. If the pattern does not exist, return -1. #####Example
>>> from pyalgo import search
>>> text = "ABBAACBCB"
>>> search.boyer_moore_search(text, "ACDCB")
4
>>> search.boyer_moore_search(text, "EDEF")
>>> -1
###Sort There are 4 sorting algorithms are implemented: merge sort, heap sort, quick sort and insertion sort
####Heap sort heap_sort(array, compare=lambda x, y: x > y) Return the sorted array. The order depends on the compare function. Best: O(n log n)
Worst: O(n log n)
Avg: O(n log n) #####Example
>>> from pyalgo import serial_sort
>>> array = [1, 0, 2, 4, 5, 10, 8, 6, 3, 7, 9]
>>> serial_sort.heap_sort(array)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
####Quick sort quick_sort(array, compare=lambda x, y: x > y) Return the sorted array. The order depends on the compare function. Best: O(n log n)
Avg: O(n log n)
Worst: O(n^2) #####Example
>>> from pyalgo import serial_sort
>>> array = [1, 0, 2, 4, 5, 10, 8, 6, 3, 7, 9]
>>> serial_sort.quick_sort(array)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
####Merge sort merge_sort(array, compare=lambda x, y: x > y) Return the sorted array. The order depends on the compare function. Best: O(n log n)
Avg: O(n log n)
Worst: O(n log n) #####Example
>>> from pyalgo import serial_sort
>>> array = [1, 0, 2, 4, 5, 10, 8, 6, 3, 7, 9]
>>> serial_sort.merge_sort(array)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
####Insertion sort insertion_sort(array, compare=lambda x, y: x > y) Return the sorted array. The order depends on the compare function.
Best: O(n)
Avg: O(n^2)
Worst: O(n^2) #####Example
>>> from pyalgo import serial_sort
>>> array = [1, 0, 2, 4, 5, 10, 8, 6, 3, 7, 9]
>>> serial_sort.insertion_sort(array)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]