در این مقاله، راهحلهایی برای جابجایی دو بلوک حافظه که درون یک بلوک بزرگتر قرار دارند، بدون تخصیص حافظه اضافی ارائه شده است. ابتدا روش سادهای با استفاده از تخصیص یک بافر ثانویه توضیح داده شده است. سپس، الگوریتم چرخش (rotate) در C++ با استفاده از `std::rotate` معرفی میشود که برای جابجایی بلوکهای مجاور مناسب است. روشی با استفاده از سه چرخش برای جابجایی بلوکهای غیر مجاور نیز شرح داده شده است. در نهایت، روش بهینهتری با استفاده از معکوس کردن (reversing) بلوکها پیشنهاد میشود که هزینه کمتری نسبت به روش سه چرخش دارد. هزینه معکوس کردن n عنصر برابر با n/2 جابجایی است و هزینه چرخش n عنصر نیز n جابجایی است.
مشاهده مطلب اصلی