# author: Marcin Cherek
# python version: 2.7.11
# Date: 12th of April 2016
# language: English
# Title: Quicksort Algorithm python implementation
# divide conquer combine
# First we choose a element to compare (pivot)
# Then we put all smaller elements in a list and
# all bigger elements in a list.
# The elements that equals the pivot goes to the pivotList.
# This method is recursive so we repeat it until they are no
# more smaller or greater elements then the pivot.
# At the end we return te more + pivotList + less.
def quicksort(aList):
return __quickSort(aList)
def __quickSort(aList):
less = []
pivotList =[]
more = []
if(len(aList)>0):
pivot = aList[0]
for i in aList:
if i < pivot:
less.append(i)
elif i > pivot:
more.append(i)
else:
pivotList.append(i)
less = __quickSort(less)
more = __quickSort(more)
return more + pivotList + less
Saturday, April 30, 2016
Quicksort in Python
Location:
Zürich, Schweiz
Mergesort in Python
# author: Marcin Cherek
# python version: 2.7.11
# Date: 12th of April 2016
# language: English
# Title: Mergesort Algorithm python implementation
# divide conquer combine
# First we split te List and then we sort the parts.
# At the end we combine the parts together to one Solution
# We split until it is not more possible to split. Then we compare
# the splited parts.
# We return all sorted Parts combined in one List
def merge_sort(aList):
middle = len(aList) /2
leftPart = aList[:middle]
rightPart = aList[middle:]
if(middle >0):
leftPart = merge_sort(leftPart)
rightPart = merge_sort(rightPart)
return list(__merge(leftPart,rightPart))
def __merge(leftPart,rightPart):
sortedL = []
left_index, right_index = 0,0
while left_index < len(leftPart) and right_index <len(rightPart):
if( leftPart[left_index] >= rightPart[right_index]):
sortedL.append(leftPart[left_index])
left_index +=1
else:
sortedL.append(rightPart[right_index])
right_index +=1
if leftPart:
sortedL.extend(leftPart[left_index:]) #Extend adds a Lists content
if rightPart:
sortedL.extend(rightPart[right_index:])
return sortedL
Location:
Zürich, Schweiz
Heapsort in Python
# author: Marcin Cherek
# python version: 2.7.11
# Date: 12th of April 2016
# language: English
# Title: Heapsort Algorithm python implementation
def heapsort(aList):
return __heapsort(aList)
# PUBLIC: HeapSort
# We build a heap with the rules
# To build a heap with start a the index of the leastparent
# and iterate to the root Element index of 0. step -1
# In the Second step we flat the Heap to an Array. We start at the
# last nodes Index and and Iterate to zero with step -1.
# In each repeat we swap the root Element with the last Element and
# rebuild our Heap with the rules. This leads to an shrinking Heap.
# The last repeat is when we have a Heap with only 2 Nodes.
def __heapsort(aList):
# List to Heap
length = len(aList) - 1
#We start at the index with the least parent because our down method need childnodes.
for i in range(abs(length / 2), -1, -1):
__down(aList, i, length)
# Heap to List
for i in range(length, 0, -1):
#swaps the last element with the rootElement
__swap(aList, 0, i)
#restore Heap rules for our smaller getting heap
__down(aList, 0, i - 1)
return aList
# PRIVATE: Down
# First we calculate the Children. Left = 2n and Right = 2n+1
# Then we look if the children exists and if they are bigger than
# the parent we swap the elements.
def __down(aList, current, heapSize):
leftC = 2 * current
rightC = leftC + 1
if (leftC <= heapSize and rightC > heapSize):
#Just one Child on the left site
if (aList[leftC] < aList[current]):
__swap(aList, leftC, current)
else:
if (rightC <= heapSize):
#There are two children and it's possible that they are also
#Parent's
child = 0
if (aList[leftC] < aList[rightC]):
child = leftC
else:
child = rightC
if (aList[child] < aList[current]):
__swap(aList, current, child)
__down(aList, child, heapSize)
#PRIVATE: SWAP
# Swap means to exchange a node with his child
# idx_one and idx_two are the indexes
def __swap(aList, idx_one, idx_two):
#logger.info(("SWAP:", aList[idx_one], aList[idx_two]))
tmp = aList[idx_one]
aList[idx_one] = aList[idx_two]
aList[idx_two] = tmp
if __name__ == "__main__":
print("RESULT:"+str(heapsort([2, 3, 21, 56, 53, 2, 1, 6, 2, 3, 2, 4, 5, 6, 5, 5, 3, 3, 4, 100])))
Location:
Zürich, Schweiz
Subscribe to:
Comments (Atom)


