Tôi đã nhận thấy rằng chức năng sắp xếp Javascript cực kỳ chậm trong các phiên bản Internet Explorer dưới 9 (thường là theo thứ tự độ lớn khi so sánh với Firefox và các trình duyệt khác. Phiên bản của riêng tôi để xem liệu tôi có thể làm tốt hơn hay không. Kết hợp các công việc sắp xếp một cách rõ ràng, nhưng dường như hầu hết tài liệu cho các thuật toán sắp xếp giả định rằng các mảng được thực hiện như các khối liên tiếp của bộ nhớ. Tôi đã tự hỏi, có một thuật toán sắp xếp có tính đến việc truy cập mảng thực tế đắt hơn bình thường không? Điều đó có nghĩa là, một thuật toán cố gắng tối ưu hóa không chỉ số lượng so sánh, mà còn là số truy cập và chi phí tạo ne w mảng qua những thứ như splice
và slice
. Đây là nỗ lực của tôi trong sắp xếp hợp nhất.Sắp xếp nhận thức được cách duy nhất Javascript đại diện cho mảng
function mergeSort(array, compareFunc) {
if (array.length <= 1) {
return;
}
var mid = Math.floor(array.length/2);
var left = array.splice(0, mid);
var right = array.splice(0, array.length);
mergeSort(left, compareFunc);
mergeSort(right, compareFunc);
while ((left.length > 0) && (right.length > 0))
{
if (compareFunc(left[0], right[0]) <= 0) {
array.push(left.shift());
}
else {
array.push(right.shift());
}
}
while (left.length > 0) {
array.push(left.shift());
}
while (right.length > 0) {
array.push(right.shift());
}
return;
}
Không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng hai vòng ở dưới cùng đó thực sự là 'concat'. – Josh