Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao xử lý mảng được sắp xếp nhanh hơn so với mảng không được sắp xếp trong C ++?


Trong C ++, xử lý mảng được sắp xếp nhanh hơn so với mảng chưa được sắp xếp do dự đoán nhánh. Trong kiến ​​trúc máy tính, dự đoán rẽ nhánh xác định xem một nhánh có điều kiện (bước nhảy) trong luồng lệnh của chương trình có khả năng được thực hiện hay không.

Hãy lấy một ví dụ -

if(arr[i] > 50) {
   Do some operation B
} else {
   Do some operation A
}

Nếu chúng tôi chạy mã này cho 100 phần tử theo thứ tự chưa được sắp xếp và sắp xếp bên dưới, mọi thứ sẽ xảy ra -

Đối với mảng đã sắp xếp -

1, 2, 3, 4, 5, …… 50, 51………100
A, A, A, A, A A, B B

Nó sẽ tải đúng nhánh trong đường ống và đúng trình tự

A, A, A, A, A, A, A, A A, B B

Đối với mảng không được sắp xếp -

5, 51, 6, 90, 4, 49, 60…
A, B, A, B, A, A, A, B

Dự đoán nhánh không đóng một vai trò quan trọng ở đây. Rất khó để dự đoán hoạt động đúng giữa A và B.