giả 1,2,3,3,4,1
là một chuỗi không được phân loại hợp lệ và 2,4,6,8
là một chuỗi giá trị (của bước hai) là tốt, nhưng không phải là 1,3,5,9
(7 là mất tích) và giả sử mảng đầu vào có thể được ghi đè,
- xác định tối đa và tối thiểu: thời gian O (n), O (1). Bạn có thể sử dụng vị trí đầu tiên và cuối cùng của mảng cho việc này.
- xác định bước. Bước này là hệ số ít phổ biến nhất của tất cả
a_n - min
- nếu chúng quá xa nhau (
max - min > (count + 1) * step
), đây không thể là chuỗi. Nếu không,
- thực hiện sắp xếp số nguyên tại chỗ. Cho đến khi bắt đầu> kết thúc:
- xem xét vị trí đầu tiên. Hãy để cho giá trị có thể
v_0
- phép vị trí mục tiêu của mình khi chúng ta giả định không có bản sao (
(v_0 - min)/step + start
) được i
- nếu vị trí mục tiêu nhỏ hơn
start
, đó là một trùng lặp. Di chuyển nó về phía sau và giảm con trỏ cuối
- nếu vị trí mục tiêu lớn hơn
end
, một số phần tử bị thiếu trong chuỗi. Yêu cầu mảng không phải là một chuỗi.
- nếu nguyên tố này là ở vị trí mục tiêu, tăng con trỏ bắt đầu và các
min
tham khảo
- khác nếu các phần tử ở vị trí đích là ít hơn mức tối thiểu tham chiếu hoặc bằng
v_0
, trao đổi nó đến cùng của mảng và giảm con trỏ kết thúc. Đó là một bản sao.
- khác trao đổi phần tử ở vị trí đích với
v_0
.
- yêu cầu bồi thường mảng một chuỗi
Các nguyên tại chỗ loại là O (n).Trong mỗi bước nó hoặc là:
- rút ngắn mảng đầu vào và giữ tất cả các yếu tố được sắp xếp tại các vị trí mục tiêu của họ hoặc
- loại một hoặc hai yếu tố trước đó không được phân loại vào vị trí mục tiêu của họ.
Khi kết thúc sắp xếp, mỗi phần tử là bản sao trong khối trùng lặp hoặc ở vị trí chính xác của nó trong khối được sắp xếp.
Lưu ý rằng bướC# 3 có thể bị bỏ qua. # 4 sẽ xác định chính xác đây không phải là một chuỗi, mặc dù chậm hơn.
Nếu bước phải là 1, sau đó thuật toán này có thể được đơn giản hóa một chút (xem phiên bản # 1)
Nguồn
2013-08-07 11:42:01
Bước 2 sử dụng không gian O (n). – jbr
Đây có phải là ý của bạn không? http://stackoverflow.com/a/18102484/499214 BướC# 2 âm thanh như bạn đang cố gắng để đi ra khỏi không gian 'O (1)' bằng cách phân bổ một số lượng không giới hạn của bộ nhớ thêm. –
OK, yêu cầu không gian bị mất – oddparity