Loading [MathJax]/jax/output/HTML-CSS/jax.js

سوال ۴۹

یک ترتیب از عددهای ‎۱‎ تا ‎۱۰‎ به ما داده شده است. دو عمل زیر را می‌توانیم بر روی هر ترتیب انجام دهیم:

آیا با استفاده از دو عمل فوق، می‌توانیم ترتیب داده شده را مرتب کنیم؟

پاسخ

با الگوریتم زیر می‌توان جای هر دو عضو دلخواه مانند i و j با فرض این که i قبل از j باشد راعوض کرد:

  • ابتدا با توجه به عمل دوم تمام اعضای قبل از i را به انتهای دنباله به ترتیب انتقال می‌دهیم.
  • با توجه به عمل اول جای i و عضو بعد از آن را عوض کرده و سپس باتوجه به عمل دوم آن‌ ‌را به انتهای دنباله انتقال می‌دهیم و این کار را تا جایی ادامه می‌دهیم که i و j مجاور باشند٬ در این مرحله خود i را به انتها منتقل می‌کنیم.
  • باتوجه به عمل اول جای j و عضو بعد از آن را عوض کرده و سپس با توجه به عمل دوم آن‌ را به انتهای دنباله انتقال می‌دهیم و کار را تا جایی ادامه می‌دهیم که جای خالی i و j پر شود.
  • باتوجه به عمل دوم تا جای ممکن اعضا را به انتها انتقال می‌دهیم تا ترتیب اولی ظاهر شود با این تفاوت که جای i و j عوض شده باشد.

با الگوریتم بالا ابتدا ۱ را به ابتدا٬ سپس ۲ را به جایگاه دوم و … انتقال می‌دهیم.