Heads up! To view this whole video, sign in with your Courses account or enroll in your free 7-day trial. Sign In Enroll
Well done!
You have completed Algorithms: Sorting and Searching!
You have completed Algorithms: Sorting and Searching!
Preview
To help make clear the importance of choosing a good sorting algorithm, we're going to start with a bad one. It's called "Bogosort".
See the instruction step that follows this video; we'll have details on the code there!
Related Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign upRelated Discussions
Have questions about this video? Start a discussion with the community and Treehouse staff.
Sign up
Our end goal is to sort a list of names.
0:00
But comparing numbers is a little
easier than comparing strings.
0:02
So we're going to start by
sorting a list of numbers.
0:05
I'll show you how to modify our examples
to sort strings at the end of the course.
0:09
To help make clear the importance of
choosing a good sorting algorithm,
0:13
we're going to start with a bad one.
0:17
It's called bogo_sort.
0:19
Basically, bogo_sort just randomizes
the order of the list repeatedly
0:21
until it's sorted.
0:26
Here's a Python code file where
we're going to implement bogo_sort.
0:27
It's not important to understand
this code here at the top.
0:31
Although, we'll have info on it in the
teacher's notes, if you really want it.
0:34
All you need to know is that it takes the
name of a file that we pass on the command
0:37
line, loads it, and returns a Python list.
0:41
Which is just like an array
in other languages,
0:44
containing all the numbers
that it read from the file.
0:47
Let me have the program print out the list
of numbers it loads so you can see it.
0:50
We'll call the print method, and
we'll pass it the list of numbers.
0:54
Save that, let's run it real quick with,
python bogo_sort.py.
0:59
Whoops.
1:07
And we need to provide it the name of the
file here on the command line that we're
1:07
gonna load.
1:12
So it's in the numbers directory.
1:13
A slash separates the directory
name from the file name, 5.txt.
1:16
And there's our list of numbers
that was loaded from the file.
1:22
Okay, let me delete that print
statement and then we'll move on.
1:25
bogo_sort just randomly rearranges
the list of values over and over.
1:29
So the first thing we're going to need
is a function to detect when the list is
1:33
sorted.
1:38
We'll write an is_sorted function that
takes a list of values as a parameter.
1:38
It will return true if the list passed
in as sorted or false if it isn't.
1:46
We'll loop through the numeric
index of each value in the list,
1:51
from 0 to 1 less than
the length of the list.
1:55
Like many languages,
Python list indexes begin at 0,
1:57
so a list with a length of 5 has
indexes going from 0 through 4.
2:00
If the list is sorted,
2:06
then every value in it will be less
than the one that comes after it.
2:07
So we test to see whether the current item
is greater than the one that follows it.
2:11
If it is, it means the whole list is
not sorted so we can return false.
2:16
If we get down here,
2:21
it means the loop completed without
finding any unsorted values.
2:22
Python uses whitespace
to mark code blocks, so
2:26
unindenting the code like this
marks the end of the loop.
2:29
Since all the values are sorted,
we can return True.
2:32
Now we need to write the function that
will actually do the so-called sorting.
2:36
The bogo_sort function will also take
a list of values it's working with as
2:40
a parameter.
2:44
We'll call our is_sorted function
to test whether the list is sorted.
2:45
We'll keep looping until
is_sorted returns true.
2:49
Python has a ready-made function that
randomizes the order of elements in
2:53
the list.
2:57
Since the list isn't sorted,
we'll call that function here.
2:57
And since this is inside the loop,
it'll be randomized over and
3:01
over until our is_sorted
function returns True.
3:04
If the loop exits, it means is_sorted
returned True and the list is sorted.
3:08
So we can now return the sorted list.
3:12
Finally, we need to call
our bogo_sort function,
3:15
pass it the list we loaded from the file
and print the sorted list it returns.
3:18
Okay, let's save this and try running it.
3:24
Do so with, python,
the name of the script, bogus_sort.py, and
3:26
the name of the file we're going to
run it on, numbers directory, 5.txt.
3:31
It looks like it's sorting
our list successfully.
3:39
But how efficient is this?
3:42
Let's add some code to track the number
of times it attempts to sort the list.
3:44
Up here at the top of
the bogo_sort function,
3:48
we'll add a variable to track
the number of attempts it's made.
3:50
We'll name it attempts and
we'll set its initial value to 0,
3:53
since we haven't made any attempts yet.
3:56
With each pass through the loop,
we'll print current number of attempts.
4:00
And then here at the loop,
after attempting to shuffle the values,
4:05
we'll add one to the account of attempts.
4:08
Let's save this and
let's try running it again a couple times.
4:14
In the console,
4:18
I can just press the up arrow to bring
up the previous commands and re-run.
4:19
So it looks like this first run to sort
this five element list took 363 attempts.
4:24
Let's try it again.
4:29
This time it only took 91 attempts.
4:31
We're simply randomizing
the list with each attempt so
4:34
each run of the program takes
a random number of attempts.
4:37
Now let's try the same program with
a larger number of items, python
4:42
bogo_sort numbers.
4:46
I have a list of 8 items set
up here in this other file.
4:51
This time it takes 11,000 attempts.
4:57
Only 487 this time.
5:01
And this time 13,000.
5:06
You can see that the trend
is increasing steadily.
5:07
The problem with bogo_sort is
that it doesn't make any progress
5:11
toward a solution with each pass.
5:14
It could generate a list where just
one value was out of order, but
5:16
then on the next attempt it could
generate a list where all the elements
5:20
are out of order again.
5:23
Stumbling on a solution is
literally a matter of luck.
5:25
And for lists with more than a few items,
it might never happen.
5:28
Up next, we'll look at selection_sort.
5:32
It's a sorting algorithm that's still
slow, but it's better than bogo_sort.
5:35
You need to sign up for Treehouse in order to download course files.
Sign upYou need to sign up for Treehouse in order to set up Workspace
Sign up