2011-06-20 38 views
5

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ư spliceslice. Đâ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; 
} 
+0

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

Trả lời

0

thử chức năng sắp xếp SQL Web. Hãy nghĩ rằng đó là nhanh hơn so với sắp xếp bản địa có sẵn trong Javascript. Nếu bạn đang viết mã hỗ trợ khả năng tương thích trình duyệt chéo, sắp xếp hợp nhất là một bản ngã tốt để sử dụng, nhưng hãy kiểm tra http://www.cs.princeton.edu/~rs/strings/ .. Điều này nói về việc sử dụng một hỗn hợp sắp xếp nhanh và sắp xếp.

Và nếu bạn có thể lấy dữ liệu được sắp xếp từ máy chủ, đó sẽ là phương pháp tốt nhất.

Các vấn đề liên quan