Python Programming Sorting and Searching
Python Programming Sorting and Searching
Sorting, Searching
Searching
1 def sequentialSearch(alist, item):
2 pos = 0
3 found = False
4
5 while pos < len(alist) and not found:
6 if alist[pos] == item:
7 found = True
8 else:
9 pos = pos+1
10
11 return found
12
13 testlist = [1, 2, 32, 8, 17, 19, 42, 13, 0]
14 print(sequentialSearch(testlist, 3))
15 print(sequentialSearch(testlist, 13))
1 def orderedSequentialSearch(alist, item):
2 pos = 0
3 found = False
4 stop = False
5 while pos < len(alist) and not found and not stop:
6 if alist[pos] == item:
7 found = True
8 else:
9 if alist[pos] > item:
10 stop = True
11 else:
12 pos = pos+1
13
14 return found
15
16 testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
17 print(orderedSequentialSearch(testlist, 3))
18 print(orderedSequentialSearch(testlist, 13))
Binary Search
1 def binarySearch(alist, item):
2 first = 0
3 last = len(alist)-1
4 found = False
5
6 while first<=last and not found:
7 midpoint = (first + last)//2
8 if alist[midpoint] == item:
9 found = True
10 else:
11 if item < alist[midpoint]:
12 last = midpoint-1
13 else:
14 first = midpoint+1
15
16 return found
17
18 testlist = [0, 1, 2, 8, 13, 17, 19, 32, 42,]
19 print(binarySearch(testlist, 3))
20 print(binarySearch(testlist, 13))
Bubble Sort
def bubbleSort(alist):
for passnum in range(len(alist)-1,0,-1):
for i in range(passnum):
if alist[i]>alist[i+1]:
temp = alist[i]
alist[i] = alist[i+1]
alist[i+1] = temp
alist = [54,26,93,17,77,31,44,55,20]
bubbleSort(alist)
print(alist)
def shortBubbleSort(alist):
exchanges = True
passnum = len(alist)-1
while passnum > 0 and exchanges:
exchanges = False
for i in range(passnum):
if alist[i]>alist[i+1]:
exchanges = True
temp = alist[i]
alist[i] = alist[i+1]
alist[i+1] = temp
passnum = passnum-1
alist=[20,30,40,90,50,60,70,80,100,110]
shortBubbleSort(alist)
print(alist)
Selection sort
def selectionSort(alist):
for fillslot in range(len(alist)-1,0,-1):
positionOfMax=0
for location in range(1,fillslot+1):
if alist[location]>alist[positionOfMax]:
positionOfMax = location
temp = alist[fillslot]
alist[fillslot] = alist[positionOfMax]
alist[positionOfMax] = temp
alist = [54,26,93,17,77,31,44,55,20]
selectionSort(alist)
print(alist)
Insertion sort
def insertionSort(alist):
for index in range(1,len(alist)):
currentvalue = alist[index]
position = index
alist[position]=currentvalue
alist = [54,26,93,17,77,31,44,55,20]
insertionSort(alist)
print(alist)
Shell sort
Shell sort with n/2 sublists
def shellSort(alist):
sublistcount = len(alist)//2
while sublistcount > 0:
sublistcount = sublistcount // 2
def gapInsertionSort(alist,start,gap):
for i in range(start+gap,len(alist),gap):
currentvalue = alist[i]
position = i
alist[position]=currentvalue
alist = [54,26,93,17,77,31,44,55,20]
shellSort(alist)
print(alist)
Merge Sort
def mergeSort(alist): j=j+1
print("Splitting ",alist) k=k+1
if len(alist)>1:
mid = len(alist)//2
lefthalf = alist[:mid] while i < len(lefthalf):
righthalf = alist[mid:] alist[k]=lefthalf[i]
i=i+1
k=k+1
mergeSort(lefthalf)
mergeSort(righthalf)
while j < len(righthalf):
alist[k]=righthalf[j]
i=0 j=j+1
j=0 k=k+1
k=0 print("Merging ",alist)
while i < len(lefthalf) and j < len(righthalf):
if lefthalf[i] < righthalf[j]:
alist[k]=lefthalf[i] alist = [54,26,93,17,77,31,44,55,20]
i=i+1 mergeSort(alist)
print(alist)
Quick Sort
Quick Sort
def quickSort(alist): alist[rightmark] = temp
quickSortHelper(alist,0,len(alist)-1)
temp = alist[first]
def quickSortHelper(alist,first,last): alist[first] = alist[rightmark]
if first= pivotvalue and \ alist[rightmark] = temp
rightmark >= leftmark:
rightmark = rightmark -1
return rightmark
if rightmark < leftmark:
done = True
else: alist = [54,26,93,17,77,31,44,55,20]
temp = alist[leftmark] quickSort(alist)
alist[leftmark] = alist[rightmark] print(alist)