Hướng dẫn thuật toán sắp xếp hợp nhất Python

Tìm hiểu cách triển khai Sắp xếp hợp nhất trong Python. Ví dụ tương tác từng bước về chiến lược sắp xếp Phân chia và Chinh phục.

Thử trong Trình chỉnh sửa

Tổng quan

Sắp xếp hợp nhất là một thuật toán sắp xếp hiệu quả cao sử dụng chiến lược chia để trị. Nó chia một danh sách chưa được sắp xếp thành các danh sách con nhỏ hơn, sắp xếp các danh sách con đó rồi hợp nhất chúng lại với nhau.

Thuật toán chia mảng một nửa theo cách đệ quy cho đến khi nó đạt đến các mảng con một phần tử. Sau đó, nó hợp nhất các mảng con đã sắp xếp bằng cách so sánh các phần tử từ mỗi phía và đặt chúng theo thứ tự đã sắp xếp. Điều này đảm bảo độ phức tạp về thời gian tối ưu.

Bất kể mảng ban đầu được sắp xếp, đảo ngược hay hoàn toàn ngẫu nhiên, Sắp xếp Hợp nhất sẽ thực hiện trong thời gian O(n log n). Tuy nhiên, nó cần thêm không gian O(n) để chứa các danh sách phụ trong giai đoạn hợp nhất.

Đầu ra mã & thực thi

Triển khai đệ quy tiêu chuẩn của thuật toán Sắp xếp Hợp nhất trong Python.

def merge_sort(arr):
    if len(arr) <= 1:
        return arr
        
    mid = len(arr) // 2
    left_half = merge_sort(arr[:mid])
    right_half = merge_sort(arr[mid:])
    
    return merge(left_half, right_half)

def merge(left, right):
    result = []
    i = j = 0
    
    while i < len(left) and j < len(right):
        if left[i] < right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1
            
    result.extend(left[i:])
    result.extend(right[j:])
    return result

# Test dataset
data = [38, 27, 43, 3, 9, 82, 10]
print("Original List:", data)
sorted_data = merge_sort(data)
print("Sorted List:  ", sorted_data)
Đầu ra thiết bị đầu cuối
Original List: [38, 27, 43, 3, 9, 82, 10]
Sorted List:   [3, 9, 10, 27, 38, 43, 82]

Triển khai từng bước

  • Sắp xếp danh sách liên kết trong đó cấu trúc nút tạo điều kiện cho việc hợp nhất dễ dàng mà không cần sao chép
  • Quy trình sắp xếp bên ngoài dành cho các tệp không vừa hoàn toàn với RAM hệ thống
  • Các ứng dụng sắp xếp ổn định trong đó các khóa khớp phải giữ nguyên thứ tự ban đầu của chúng

Câu hỏi thường gặp

Hợp nhất Sắp xếp có phải là thuật toán sắp xếp ổn định không?

Có, Sắp xếp Hợp nhất ổn định. Khi so sánh các phần tử giống nhau, phần tử từ mảng con bên trái (ban đầu) được đặt trước, giữ nguyên vị trí tương đối ban đầu của chúng.

Tại sao Python sử dụng Timsort thay vì Sắp xếp hợp nhất thuần túy?

`sorted()` tích hợp của Python sử dụng Timsort, đây là một thuật toán kết hợp kết hợp Sắp xếp Hợp nhất và Sắp xếp Chèn. Nó tối ưu hóa các mẫu dữ liệu trong thế giới thực bằng cách xác định các phân đoạn phụ đã được sắp xếp, hiển thị nó nhanh hơn Sắp xếp Hợp nhất thuần túy.

Chủ đề liên quan