Quicksort được mô tả là "tại chỗ" nhưng sử dụng một triển khai như:
def sort(array):
less = []
equal = []
greater = []
if len(array) > 1:
pivot = array[0]
for x in array:
if x < pivot:
less.append(x)
if x == pivot:
equal.append(x)
if x > pivot:
greater.append(x)
return sort(less) + equal + sort(greater)
else:
return array
Bạn phải tạo một bản sao của danh sách cho mỗi lần đệ quy. Khi trở về đầu tiên, trong bộ nhớ chúng ta có:
- mảng
- lớn hơn + bằng + ít hơn
Sau đó, bằng đệ quy thứ hai trên tất cả các danh sách phụ chúng ta có:
- mảng
- lớn hơn, bằng nhau, ít hơn từ đệ quy đầu tiên
- lớn hơn + bằng + ít hơn từ less1, lớn hơn + bằng + ít hơn từ lớn1
Vân vân...
Đây chỉ là mã được viết xấu hay tôi đúng khi nghĩ rằng đối với một danh sách lớn, bạn thực sự phải có, theo tỷ lệ, một lượng không gian thừa để lưu trữ?
Khi tôi nghĩ về một cái gì đó là "tại chỗ", tôi nghĩ về sắp xếp bong bóng, chỉ đơn giản là hoán đổi các yếu tố trong danh sách như: http://en.wikipedia.org/wiki/File:Bubble-sort-example-300px. gif
BubbleSort chỉ cần thêm 1 biến để lưu trữ phần tử có khả năng hoán đổi.