cuốn sách gpt4 ai đã làm

algorithm - Python 快速排序调试

In lại Tác giả: Taklimakan 更新时间:2023-11-03 06:13:01 25 4
mua khóa gpt4 Nike

Tôi đã triển khai tính năng sắp xếp nhanh này nhưng dường như tôi có một lỗi mà tôi không thể sửa được, có ai phiền xem nhanh không?

Kết quả của ví dụ tôi đưa ra gần giống với câu trả lời, nhưng một số chỉ mục bị đặt sai vị trí.


phân vùng def (mảng, trục, bắt đầu, kết thúc):

# di chuyển trục về cuối
tạm thời = mảng [trục]
mảng[trục] = mảng[kết thúc]
mảng [kết thúc] = tạm thời

tôi = bắt đầu
j=cuối-1

trong khi(i < j):

# kiểm tra từ bên trái để tìm phần tử lớn hơn trục
while(i < j và mảng[end] > mảng[i]):
tôi = tôi + 1
# kiểm tra từ bên phải để tìm phần tử nhỏ hơn trục
while(i < j và mảng[end] < mảng[j]):
j=j-1

# nếu chúng ta tìm thấy một cặp phần tử bị đặt sai vị trí, hãy hoán đổi chúng
nếu(i < j):
tạm thời = mảng [i]
mảng[i] = mảng[j]
mảng[j] = tạm thời

# di chuyển phần tử trục tới vị trí của nó
tạm thời = mảng [i]
mảng[i] = mảng[end]
mảng [kết thúc] = tạm thời

# quay lại vị trí xoay
trả lại tôi

def quicksort_helper(mảng, bắt đầu, kết thúc):
nếu (bắt đầu < kết thúc):
trục = (bắt đầu + kết thúc) / 2
r = phân vùng (mảng, trục, bắt đầu, kết thúc)
quicksort_helper(mảng, bắt đầu, r - 1)
quicksort_helper(mảng, r + 1, end)

def quicksort(mảng):
quicksort_helper(mảng, 0, len(mảng) - 1)

mảng = [6, 0, 5, 1, 3, 4, -1, 10, 2, 7, 8, 9]
sắp xếp nhanh (mảng)
mảng in

Tôi cảm thấy câu trả lời là hiển nhiên, nhưng tôi không thể tìm thấy nó.

Đầu ra mong muốn:

[-1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

Sản lượng thực tế:

[-1, 0, 2, 3, 1, 4, 5, 6, 7, 8, 9, 10]

câu trả lời hay nhất

Cách sửa lỗi chính là nội bộ while vòng lặp, nơi bạn có thể sử dụng Tôij gần nhau. Logic bạn đã đăng sẽ ổn nếu bạn chỉ lo lắng về việc hoán đổi các phần tử không xoay chính xác. Tuy nhiên, vòng lặp đầu tiên yêu cầu

    while(i <= j và mảng[end] > mảng[i]):
tôi = tôi + 1

确保 Tôi Có giá trị chính xác để hoán đổi phần tử trụ về giữa. Nếu không, bạn có thể hoán đổi nó sang một phần tử ở bên trái của vị trí thích hợp, đó là lý do tại sao việc sắp xếp không thành công.

Bạn cũng có thể sử dụng phép gán nhiều lần của Python để thực hiện các trao đổi rõ ràng hơn:

trong khi(i < j):

# kiểm tra từ bên trái để tìm phần tử lớn hơn trục
while(i <= j và mảng[end] > mảng[i]):
tôi = tôi + 1
# kiểm tra từ bên phải để tìm phần tử nhỏ hơn trục
while(i < j và mảng[end] < mảng[j]):
j=j-1

# nếu chúng ta tìm thấy một cặp phần tử bị đặt sai vị trí, hãy hoán đổi chúng
nếu(i < j):
mảng[i], mảng[j] = mảng[j], mảng[i]

Về thuật toán - Gỡ lỗi sắp xếp nhanh Python, chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/45722995/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress