Sorting and reversing lists in Python - Time & Space Complexity
Start learning this pattern below
Jump into concepts and practice - no test required
When we sort or reverse lists, we want to know how the time needed grows as the list gets bigger.
We ask: How much longer does it take if the list doubles or triples in size?
Analyze the time complexity of the following code snippet.
my_list = [5, 3, 8, 1, 2]
my_list.sort()
my_list.reverse()
This code sorts a list in ascending order, then reverses it to get descending order.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Sorting the list, which compares and moves elements multiple times.
- How many times: The sorting process repeats comparisons roughly proportional to n log n of the list size.
- Reversing: Goes through the list once to swap elements from ends to middle.
Sorting takes more time as the list grows, but reversing grows more slowly.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | About 30 to 50 for sorting, 10 for reversing |
| 100 | About 600 to 700 for sorting, 100 for reversing |
| 1000 | About 10,000 to 14,000 for sorting, 1,000 for reversing |
Pattern observation: Sorting grows much faster than reversing as list size increases.
Time Complexity: O(n log n)
This means sorting takes longer as the list grows, but not as fast as checking every pair; reversing just goes through the list once.
[X] Wrong: "Reversing a list takes as long as sorting it."
[OK] Correct: Reversing only swaps elements once each, so it takes much less time than sorting, which compares many pairs.
Understanding how sorting and reversing scale helps you explain your choices clearly and shows you know what happens behind the scenes.
"What if we used a different sorting method like bubble sort instead of the built-in sort? How would the time complexity change?"
Practice
list.sort() method do to a list in Python?Solution
Step 1: Understand the purpose of
Thelist.sort()list.sort()method changes the original list to arrange its items in ascending order.Step 2: Differentiate from other list methods
Unlikelist.reverse(), which flips the list order,list.sort()orders items from smallest to largest.Final Answer:
It arranges the list items in ascending order. -> Option AQuick Check:
list.sort() = ascending order [OK]
- Confusing sort() with reverse()
- Thinking sort() returns a new list
- Assuming sort() removes duplicates
numbers in descending order?Solution
Step 1: Identify correct parameter for descending sort
Thesort()method acceptsreverse=Trueto sort in descending order.Step 2: Check syntax correctness
numbers.sort(reverse=True) uses the correct syntax:numbers.sort(reverse=True). Other options use invalid parameters or method calls.Final Answer:
numbers.sort(reverse=True) -> Option AQuick Check:
sort(reverse=True) = descending order [OK]
- Using reverse=1 instead of reverse=True
- Using non-existent parameters like descending=True
- Calling reverse() with parameters
items = [3, 1, 4, 2] items.sort() items.reverse() print(items)
Solution
Step 1: Apply
This sorts the list in ascending order: [1, 2, 3, 4].items.sort()Step 2: Apply
This reverses the sorted list, resulting in [4, 3, 2, 1].items.reverse()Final Answer:
[4, 3, 2, 1] -> Option CQuick Check:
sort() then reverse() = descending list [OK]
- Thinking reverse() sorts the list
- Assuming print shows original list
- Confusing order of method calls
data in descending order. What is wrong?data = [5, 2, 9, 1] data.reverse() data.sort() print(data)
Solution
Step 1: Analyze method order
The code reverses the list first, then sorts it ascending, which cancels the reverse effect.Step 2: Correct method order for descending sort
To get descending order, first sort ascending, then reverse the list.Final Answer:
The reverse() call should come after sort(). -> Option BQuick Check:
sort() then reverse() = descending order [OK]
- Reversing before sorting cancels sorting effect
- Thinking reverse() sorts the list
- Assuming method order does not matter
words = ['apple', 'banana', 'cherry', 'date']. You want to sort them in reverse alphabetical order without changing the original list. Which code snippet achieves this?Solution
Step 1: Understand difference between
sort()andsorted()sort()changes the original list;sorted()returns a new sorted list.Step 2: Choose method that sorts in reverse without changing original
Usingsorted(words, reverse=True)returns a new list sorted in reverse alphabetical order, leavingwordsunchanged.Final Answer:
sorted_words = sorted(words, reverse=True) -> Option DQuick Check:
sorted() returns new sorted list [OK]
- Using sort() which changes original list
- Chaining reverse() before sort() incorrectly
- Assigning sort() result which is None
