تالار گفتمان مانشت
مرتب سازی انتخابی - نسخه‌ی قابل چاپ

مرتب سازی انتخابی - amir_ghanati - 11 آذر ۱۳۹۶ ۰۶:۲۳ ب.ظ

سلام
دوستان کسی میتونه مرتب سازی انتخابی صعودی رو از روی شبه کدی که پوران گفته برای من توضیح بده؟ اصلا شبه کد رو لازمه بلد باشیم؟


با این اعداد از چپ به راست:
۴۰ ۹۰ ۲۰ ۵۰ ۳۰ ۱۰

RE: مرتب سازی انتخابی - msour44 - 11 آذر ۱۳۹۶ ۰۸:۵۳ ب.ظ

سلام
در مرتب سازی انتخابی هر بار max(یا min ) انتخاب می شود برحسب صعودی یا نزولی خواستن مرتب سازی از اخر به اول یا از اول به اخر ارایه عناصر max (یاmin ) را قرار می دهیم. دراین شبه کدی که شما قرار دادید دستور اول (for i=n downto 2) ابتدا i=n میگیریم در خط بعدی اولین عنصر را max گرفته و index مقدار اندیس عنصر max در در خود دارد .در خط بعدی (for j=2 to i) که i در ابتدا برابر n بود مقدار عناصر با اندیس های از ۲ تا n با max(که عنصر اول ارایه بود) مقایسه می شود و در صورت لزوم مقدارش اپدیت می شود(در واقع Max بین عناصر ۱ تا n را میابیم) در خط اخر عنصر max و عنصر اخر ارایه با هم جابجا می شوند.دوباره بر میگردیم به حلقه بیرونی و از تعدادش یک واحد کم می شود یعنی این بار i=n-1 می شود و در حلقه ی داخلی max بین عناصر ۱ تا n-1 را میابیم و با عنصری که در مکان n-1 ذخیره شده جابجا میکنیم.و همین طور...
با اعداد ۱۰,۳۰,۵۰,۲۰,۹۰,۴۰, (که در سوال مطرح کردید)
max=90 پس اونو با ۴۰ جابجا میکنیم ۱۰,۳۰,۵۰,۲۰,۴۰,۹۰
در گام بعدی عنصر اخر(۹۰ ) نادیده گرفته میشود. عنصر Max در بین عناصر باقی مانده max=50 که اونو با عنصر ۴۰ جابجا می کنیم ۱۰,۳۰,۴۰,۲۰,۵۰,۹۰ در گام بعدی max=40 که با ۲۰ جابجا می شود ۱۰,۳۰,۲۰,۴۰,۵۰,۹۰ و در گام بعدی max=30 که با ۲۰ جابجا می شود ۱۰,۲۰,۳۰,۴۰,۵۰,۹۰ در گام بعدی max=20 که در مکان درستش قرار داره البته نیازی به این گام نبود چو لیست مرتب شده بود.
دانستن شبه کد هم تقریبا لازمه البته نه به صورت حفظی چون در کتاب های مختلف نوشتن شبه کد متفاوته ولی خود روال کار الگوریتم در تمام کتاب ها برای یک الکوریتم خاص تقریبا یکسانه.