Merge sort

Cấu trúc dữ liệu và Thuật toán với Python

Miriam Antona

Software engineer

Merge sort

  • Follows divide and conquer
    • Divide
      • divides the problem into smaller sub-problems
    • Conquer
      • sub-problems are solved recursively
    • Combine
      • solutions of sub-problems are combined to achieve the final solution
Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The list has been divided into two parts.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The list has been divided into two parts. The are two new lists, the first one has the left half of the original list and the second one has the right half of the original list.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The new lists have been divided into two parts.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. There are new lists with the divisions of the last divided lists.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The new lists have been divided into two parts.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. There are new lists with the divisions of the last divided lists.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The new lists have been divided into two parts.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The new lists have been divided into two parts.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The elements from the last divided lists have been sorted.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The elements from the last divided lists have been merged and ordered.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The elements from the last divided lists have been merged and ordered.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - in action

A schematic representation of a list with unordered numbers. The elements from the last divided lists have been merged and ordered. All the elements are sorted.

Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - implementation

def merge_sort(my_list):
  if len(my_list) > 1:

mid = len(my_list)//2 left_half = my_list[:mid] right_half = my_list[mid:]
merge_sort(left_half) merge_sort(right_half)
i = j = k = 0
while i < len(left_half) and j < len(right_half):
if left_half[i] < right_half[j]:
my_list[k] = left_half[i]
i += 1
else:
my_list[k] = right_half[j]
j += 1
k += 1
    while i < len(left_half):

my_list[k] = left_half[i] i += 1 k += 1
while j < len(right_half): my_list[k] = right_half[j] j += 1 k += 1
my_list = [35,22,90,4,50,20,30,40,1]
merge_sort(my_list)
print(my_list)
[1, 4, 20, 22, 30, 35, 40, 50, 90]
Cấu trúc dữ liệu và Thuật toán với Python

Merge sort - complexity

  • Worst case: $O(n\log{}n)$
    • significant improvement over bubble sort, selection sort, and insertion sort
    • suitable for sorting large lists
  • Average case: $\Theta(n\log{}n)$
  • Best case: $\Omega(n\log{}n)$
    • other algorithms (e.g. bubble sort, insertion sort) have better best case complexity
  • Space complexity: $O(n)$
    • worst space complexity than other algorithms with $O(1)$
  • Other variants reduce this space complexity
Cấu trúc dữ liệu và Thuật toán với Python

Let's practice!

Cấu trúc dữ liệu và Thuật toán với Python

Preparing Video For Download...