Exercises for Lesson 26
Exercise: Running time of selection sort
Here is the Python code for selection sort:
def selectionSort(mylist):
n = len(mylist)
# Consider each starting index except the last, as that
# will be the maximum element in the list by the time
# we finish with the second-to-last position
for startIdx in range(n-1):
# Find the minimum element of those from startIdx
# to the end of the list
minIdx = startIdx
for i in range(startIdx+1, n):
if mylist[i] < mylist[minIdx]:
minIdx = i
# Swap to put the minimum element (of those startIdx->end)
# in position startIdx
mylist[startIdx], mylist[minIdx] = mylist[minIdx], mylist[startIdx]
Part a: Predicting running times
Recall that we said that selection sort makes a number of comparisons (the if
condition check in the code above) equal to n(n-1)/2. Using that information, fill in the following table.
n | # comparisons | |||
---|---|---|---|---|
2 | ||||
4 | ||||
8 | ||||
16 | ||||
32 | ||||
64 | ||||
128 | ||||
256 |
Part b: Plotting running times
The expression in part (a) is roughly equal to n**2
as n
gets really big. Download this selection sort program and run it to graph how long it takes to sort a random list, on average.
Note that with 1000 data points per value of n
and with the given list of values of n
, it might take at least five minutes to run. You can decrease numTests
to make it run faster, although then it won’t test with as much data.