Class 25 - Sorting and Searching
Slides
Algorithms, Programs, and Problems
What is an algorithm?
What is the difference between an algorithm and a program?
What is the sorting problem?
What is a sorting algorithm?
Selection Sort
def selection_sort(alist):
for index in range(0, len(alist)):
maxpos = index
maxvalue = alist[index]
for index1 in range(index, len(alist)):
if (alist[index1] < maxvalue):
maxpos = index1
maxvalue = alist[index1]
temp = alist[index]
alist[index] = alist[maxpos]
alist[maxpos] = temp
What is the asymptotic running time of selection_sort?
Best-First Sort
def list_find_best(p):
"""
Returns the index of the best (according to pick_better)
element in p.
"""
if len(p) <= 1:
return 0
else:
bestpos = 1 + list_find_best(p[1:])
if p[0] <= p[bestpos]:
return 0
else:
return bestpos
def list_sort_insert(cf, p):
if len(p) == 0:
return p
else:
return list_insert_one(cf, p[0], list_sort_insert(cf, p[1:]))//second change
def list_sort_best_first(p):
p = list(p)
if len(p) == 0:
return p
else:
bestpos = list_find_best(p)
bestel = p.pop(bestpos) # removes p[bestpos] from p
return [bestel] + list_sort_best_first(p)
What is the best case running time for list_sort_best_first?
What is the average case running time for list_sort_best_first?
What is the worst case running time for list_sort_best_first?
Insertion Sort
def list_insert_one(el, p):
if len(p) == 0:
return [el]
if el < p[0]:
return [el] + p
else:
return [p[0]] + list_insert_one(el, p[1:])
def list_sort_insert(p):
if len(p) == 0:
return p
else:
return list_insert_one(p[0], list_sort_insert(p[1:]))
What is the best case running time for list_sort_insert?
What is the worst case running time for list_sort_insert?
Generalizing Comparison
def list_insert_one(cf, el, p):
if len(p) == 0:
return [el]
if cf(el, p[0]):
return [el] + p
else:
return [p[0]] + list_insert_one(cf, el, p[1:])
def list_sort_insert(cf, p):
if len(p) == 0:
return p
else:
return list_insert_one(cf, p[0], list_sort_insert(p[1:]))