36
ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ) Sorting Algorithms ( ﻣﺘ ﺟﻢ ﻭ ﮔﺮﺩﺁﻭﺭﻧﺪﻩ: ﻣﺤﻤﺪ ﺍﺭﺩﻛﺎﻧﻲ ﻧﮋﺍﺩSorting Algorithms ﺍﻟﮕﻮﺭﻳﺘﻢ ﻫﺎﻱ ﻣﺮﺗﺐ ﺳﺎﺯﻱ ﻣﺘﺮﺟﻢ ﻭ ﮔﺮﺩﺁﻭﺭ ﻧﺪﻩ ﻣﺤﻤﺪ ﺍﺭﺩﻛﺎﻧﻲ ﻧﮋﺍﺩ

Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

  • Upload
    others

  • View
    14

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Sorting Algorithms الگوريتم هاي مرتب سازي

نده مترجم و گردآورمحمد اردكاني نژاد

Page 2: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

مقدمه

پركاربرد . در علم كامپيوتر و رياضيات يك الگوريتم مرتب سازي الگوريتمي است كه عناصر يك ليست را در يك ترتيب مشخص قرار دهد

كه ) Merge ( و تلفيق ) Search ( الگوريتم هايي از قبيل جستجو . ترتيب هاي عددي و ترتيب هاي واژه اي هستند ترين ترتيب ها،

همچنين از مرتب . احتياج به ليست مرتب شده و اجراي صحيح دارند از مرتب سازي كارآمد براي بهبود كاركرد خود استفاده مي كنند

طبق قرارداد، هر خروجي . براي انسان خروجي قابل خواندن ايجاد كند استفاده مي شود سازي براي متعارف ساختن داده ها بصورتي كه

: بايد داراي دو شرط اساسي باشد

. ) هر عنصر با توجه به ترتيب كلي نبايد كوچكتر از عنصر قبلي خود باشد . ( خروجي بايد داراي ترتيب غير نزولي باشد . ۱

. براي ورودي مي باشد ) Permutation ( خروجي نوعي جايگشت . ۲

شايد پيچيدگي حل اين مسائل بيشتر براي . از زمان پيدايش علم كامپيوتر بر روي مساله مرتب سازي تحقيقات بسيار زيادي شده است

ي اولين بار در برا ) Bubble Sort ( براي مثال مرتب سازي حبابي . رسيدن به كارآمدي بيشتر بوده و نه سادگي بيشتر و بيان ساده تر

اگرچه بسياري آن را مساله اي حل شده مي پنداشتند ولي تا امروز هم الگوريتم هاي مرتب سازي . مورد تحليل قرار گرفت ۱۹۵۶ سال

). معرفي شد ۲۰۰۴ در سال Library Sort براي مثال مرتب سازي كتابخانه اي يا . ( جديدي ابداع شده است

ازي در كالس هاي مباني علم كامپيوتر بسيار رايج هستند، در اينجاست كه الگوريتم هاي فراواني كه استفاده از الگوريتم هاي مرتب س

بزرگ، الگوريتم هاي تقسيم و غلبه، ساختمان داده ها، O براي حل مساله ها ارائه مي شوند ما را به مفاهيم بنيادي الگوريتم از قبيل نماد

. هترين، متوسط و بدترين و روابط نسبيتي فضاي مصرفي و زمان رهنمون مي سازد الگوريتم هاي تصادفي، تحليل حالت هاي ب

دسته بندي

: الگوريتم هاي مرتب سازي كه در علم كامپيوتر استفاده مي شوند اغلب به گروه هاي زير دسته بندي مي شوند

ليست يا آرايه بر حسب اندازه ) Computational Complexity ( پيچيدگي محاسباتي مقايسات عناصر

حالت . است ) را بخوانيد امگا Ω(n 2 ) ) Ω است و بدترين حالت نيز O(n.logn) براي الگوريتم هاي مرتب سازي معمولي بهترين حالت

الگوريتم هاي مرتب سازي كه تنها از ايده مقايسه كليد استفاده مي كنند هميشه حداقل به . است O(n) ايده آل براي مرتب سازي

Ω(nlogn) مقايسه احتياج دارند .

عناصر بر حسب حافظه مصرفي ) Swapping ( پيچيدگي محاسباتي تعويض

حافظه براي مرتب كردن O(logn) يا O(1) هستند كه تنها احتياج به " درجا " در حالت خاص، بعضي از الگوريتم هاي مرتب سازي

. فضايي كمكي براي ذخيره سازي موقتي عناصر دارند عناصر خود دارند ، درحالي كه ديگر الگوريتم ها احتياج به ايجاد

Page 3: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

بازگشت

) مثال مرتب سازي ادغام . ( بعضي از الگوريتم ها يا بازگشتي هستند يا غيربازگشتي، درحالي كه بقيه ممكن است هر دو باشند

) Stability ( پايداري

. را حفظ مي كنند ) يا مقادير ( يكسان الگوريتم هاي مرتب سازي پايدار، ترتيب نسبي ركوردهاي با كليدهاي

دسته بندي الگوريتم هاي مرتب سازي

) : Comparison Sorting Algorithms ( هاي مقايسه اي الگوريتم . ۱

مرتب سازي مقايسه اي نوع خاصي از الگوريتم هاي مرتب سازي است كه تنها مي تواند عناصر آرايه را از طريق يك عملگر مقايسه اي

خواه يا . بخواند كه مشخص مي كند كداميك از دو عنصر بايد در آرايه نهايي در ابتدا قرار بگيرند ) ” كوچكتر از “ اغلب عملگر ( منفرد

مرتب سازي مقايسه اي داده ها را تنها بر اساس مقايسه دو عنصر با عملگرهاي مقايسه اي . ناخواه مرتب سازي مقايسه اي وجود دارد

. بررسي مي كند

) : Stable Sorting Algorithms ( گوريتم هاي پايدار ال . ۲

به عنوان مثال فرض كنيد در يك آرايه . الگوريتم هاي مرتب سازي پايدار ، ارتباط نسبي ركوردهاي با مقادير مساوي را نگه مي دارد

را نگه دارد ، يعني در آرايه مرتب شده ، حال به الگوريتمي پايدار گفته مي شود كه اين ترتيب . ظاهر شده است S قبل از ركورد R ركورد

R قبل از S يعني يك الگوريتم مرتب سازي را زماني پايدار گويند اگر هر وقت دو ركورد . ظاهر شود R و S با مقادير يكسان در آرايه

هنگامي كه عناصر . هر شود ظا S بايد قبل از R ظاهر شود ، در آرايه مرتب شده نيز S زودتر از R موجود باشند و اگر در آرايه اصلي

اما، زوج اعدادي را در نظر بگيريد كه حالت ابتدايي آنها . مساوي غير قابل تشخيص هستند از قبيل اعداد صحيح، پايداري مورد نظر نيست

: به صورت زير است

(4, 1) (3, 1) (3, 7) (5, 6)

: ركوردهاي با مقادير يكسان را حفظ كرد و ديگري نتوانست در اين حالت ، دو نتيجه مختلف حاصل شد ، يكي ترتيب نسبي

(3, 1) (3, 7) (4, 1) ) ترتيب حفظ شد ( (6 ,5)

(3, 7) (3, 1) (4, 1) ) ترتيب تغيير كرد ( (6 ,5)

الگوريتم هاي مرتب سازي ناپايدار ممكن است ترتيب نسبي ركوردهاي با مقادير يكسان را تغيير دهند اما الگوريتم هاي مرتب سازي

يكي از روش هاي . الگوريتم هاي مرتب سازي ناپايدار مي توانند در حاالت خاصي به حالت پايدار برسند . پايدار هرگز اين گونه نيستند

دادن مصنوعي مقايسه كليدهاست كه طبق آن مقايسه بين دو عنصر با كليدهاي يكسان بگونه اي انجام مي پذيرد كه اين كار، توسعه

. با اين وجود به خاطر سپردن اين ترتيب اغلب احتياج به فضاي اضافي دارد . ترتيب مدخل هاي موجود در ليست اصلي را حفظ كند

Page 4: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

يسي الگوهاي استفاده از حافظه و مرتب سازي اند

Swapping هنگامي كه اندازه آرايه اي كه در حال مرتب شدن است از ميزان حافظه اختصاص داده شده به آن فراتر مي رود بايد عمل

در اينجاست كه الگوهاي استفاده از حافظه از اهميت فراواني برخوردار مي . انجام شود ) البته با سرعت بسيار كمتر ( يا مبادله روي ديسك

در اين سناريو تعداد مقايسه ها از . الگوريتم هنگامي مي تواند كارآمد باشد كه آرايه آن به راحتي در حافظه اصلي قرار بگيرد يك . شوند

اهميت كمتري برخوردار خواهند شد و در عوض تعداد قطعاتي از حافظه كه بايد به ديسك كپي شوند و از ديسك مبادله شوند تبديل به

مقايسه ها مي توانند مهم تر از ) Localization ( ي الگوريتم خواهند شد بنابراين تعداد گذرها و محلي كردن شاخص عمده اي در كاراي

و يا با به كارگيري تكنيك ( تعداد سطرهاي مقايسه شوند و تا هنگامي كه مقايسه عناصر مجاور با يكديگر در حد سرعت باس سيستم

Caching حتي در حد سرعت CPU ( در مقايسه با سرعت ديسك مي تواند بسيار سريع باشد باشد اين سرعت .

جا نشود به RAM كافي ارائه دهد اما اگر آرايه در RAM مي تواند كارايي قابل قبولي را با Quick Sort براي مثال، الگوريتم بازگشتي

بجايي متعددي بر روي ديسك انجام دليل روش بازگشتي كه قسمت هاي آرايه را كپي مي كند و باعث مي شود كه عمليات كپي و جا

. شود سرعت اين الگوريتم به شدت كاهش پيدا مي كند

روش ديگري كه مي توان در مورد اين مساله روي آن كار كرد هنگاميست كه قصد مرتب سازي ركوردهاي متعدد همراه با كليدهاي

در اين مورد ما مي توانيم انديسي را روي آرايه ايجاد كنيم و ). اي به عنوان مثال در پايگاه داده هاي رابطه ( نسبي كوچك را داشته باشيم

بعد از آن مي توانيم كل آرايه را با خواندن انديس ها در يك گذر مرتب . ( به جاي اينكه كل آرايه را مرتب كنيم انديس آن را مرتب كنيم

جاي بگيرند و به اين وسيله مي RAM ه راحتي مي توانند در به اين دليل كه انديس ها به مراتب كوچك تر از كل آرايه هستند ب ). كنيم

. نيز مي نامند " Tag Sort " اين روش را . روي ديسك را حل كنيم Swapping توانيم مشكل

اي تكنيك ديگري كه براي غلبه بر مشكل اندازه حافظه مي توان بكار برد اينست كه دو الگوريتم را بگونه اي با هم تركيب كنيم كه مزاي

براي مثال آرايه مي تواند به تكه هاي كوچكي تقسيم شود كه آن تكه ها به راحتي در . قدرت هر كدام كارايي كلي را بهبود ببخشند

RAM اين تكه ها مي توانند با الگوريتم هاي كارامدي چون . قرار بگيرند Quick sort يا Heap sort مرتب شوند و درنتيجه هر

را در همان ابتدا روي كل Merge Sort اين روش بهتر از آنست كه الگوريتم . ادغام شوند Merge sort وريتم قسمت با استفاده از الگ

. كه روي كل آرايه اعمال مي شود، دارد Quick Sort كمتري نسبت به الگوريتم RAM آرايه اعمال كنيم اما اين روش نيز احتياج به

Page 5: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

پشتيباني زبان ها

. اكثر زبانها از مرتب سازي ها پشتيباني مي كنند

است كه مي تواند يك مرتب سازي مقايسه اي اختياري روي آرايه ()qsort داراي يك كتابخانه تابع استاندارد به نام C زبان

پياده سازي آن معموال الزم نيست . اي از اشيا كه از يك عملگر مقايسه اي كه به عنوان يك اشاره گر به تابع ارسال مي شود انجام دهد

. باشد Quick Sort كه مبتني بر

كه آرايه را در std::sort با نام ) كتابخانه استاندارد قالب ( STL استفاده مي كند منتها از يك تابع ()qsort نيز از C ++ زبان

كه احتياج به دستيابي تصادفي ندارد ) ليست پيوندي ( std::list عالوه بر آن كالس . بازه اي تصادفي مرتب مي كند استفاده مي كند

دو تابع ++C همچنين . را پشتيباني كنند > ه مرتب مي شوند بايد عملگر نوع عناصري ك . استفاده مي شود Sort بعنوان متد

stable_sort و partial_sort را ارائه داده است .

هستند و بترتيب روي آرايه ها و ()sort كه شامل متدهاي استاتيك Collections و Arrays از كالسهاي Java زبان

. ليست ها عمل مي كنند استفاده مي كند

.NET Framework از يك متد استاتيك كه Array.Sort() نام دارد استفاده مي كند كه مي تواند يك آرايه از اشيا كه

اگرچه الگوريتم موردنظر مستند نشده است ولي با استفاده از مهندسي . از مقايسه كننده هاي اختياري استفاده مي كنند را مرتب كند

()Sort از يك متد به نام NET. آن عالوه بر . استفاده مي كند Quick Sort معكوس مشخص شده است كه مايكروسافت از الگوريتم

نيز امكانات List يك نوع جديد به نام . استفاده مي كند Quick Sort استفاده مي كند كه آن نيز از ArrayList بر روي كالس

. مرتب سازي را مهيا كرده است

است كه از يك تابع مقايسه كننده كه مقادير صحيح منفي، صفر يا sort به نام ) built‐in ( داراي يك تابع دروني Perl زبان

و قبل از آن 5.6 اين زبان در ورژن . مثبت را به ترتيب براي نشان دادن عبارات كوچكتر، مساوي يا بزرگتر به كار مي برد استفاده مي كند

Merge استفاده مي كرد و بعد از آن الگوريتم كندتر Quick Sort از الگوريتم Sort انگيزه اصلي براي انتخاب . را بكار برد Merge

Sort امنيت آن بود . Perl يك زبان بسيار محبوب براي نوشتن برنامه هاي تحت وب است بنابراين اگر الگوريتم مرتب سازي آن داراي

اد رفتارهايي به مانند حمله هاي پيچيدگي زماني ضعيف و بد باشد مهاجمان مي توانند ورودي هايي را توليد كنند كه عمدا باعث ايج

DOS شود . Merge Sort از جهاتي از Quick Sort ناكارآمدتر است ولي بر خالف آن فاقد جنبه هاي آسيب پذيري است .

براي مرتب sort براي مرتب كردن حلقه هاي تكرار اختياري و متد sorted از دو تابع دروني به نام هاي Python زبان

. درجاي ليست ها استفاده مي كند سازي

Page 6: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

انواع الگوريتم هاي مرتب سازي

يكي از مباحث اساسي دروس ساختمان داده ها و اصول طراحي الگوريتم ، يافتن الگوريتم هايي براي مرتب سازي اعدادي بهم ريخته اي همچنين مرتبه پيچيدگي . الگوريتم ها آشنا مي شويد در اين مقاله با چند نمونه از اين . است كه در يك آرايه پشت سر هم قرار گرفته اند

. را ذكر خواهيم كرد ) براي اجراي هر الگوريتم مي گيرد CPU ميزان زماني كه از ( هر الگوريتم

در اين روش، برنامه كوچكترين مقدار را يافته و آنرا در اولين خانه ): Selection Sort ( الگوريتم مرتب سازي انتخابي . ۱

حال كه كوچكترين عضو، يافت شده است، برنامه به سراغ يافتن دومين عنصر كوچك در ميان اعداد باقي . آرايه قرار مي دهد به سراغ سومين عدد كوچك مي حال . هستند مي رود و دومين عدد كوچك را در خانه دوم قرار مي دهد n تا ۲ مانده كه از

بار n را عدد n با توجه به اينكه برنامه بايد . رود و اين رويه را تا يافتن آخر عدد و قرار دادن آن در جاي خودش تكرار ميكند

. است O(n 2 ) با هم مقايسه كند مرتبه ي پيچيدگي اين الگوريتم در صورتي كه عنصر . عنصر بعدي اش مقايسه ميشود در اين روش هر عنصر با ): Bubble Sort ( مرتب سازي حبابي . ۲

برنامه به كارش ادامه ميدهد و عناصر دوم و سوم را با . دومي كوچكتر از عنصر اولي باشد، جاي دو عنصر با هم عوض ميشود كند و مراحل قبل را دوباره الگوريتم ، پويش را از اول آرايه شروع مي . هم مقايسه ميكند و اين كار را تا اخر آرايه ادامه ميدهد

. است O(n 2 ) مرتبه ي پيچيدگي اين الگوريتم . تكرار ميكند و اين مراحل آنقدر تكرار ميشوند تا آرايه كامال مرتب شده باشد در اين روش عنصر اول و دوم با هم مقايسه شده و در صورت نياز مرتب مي ): Sort Insertion ( مرتب سازي درجي . ۳

در صورتي كه عنصر سوم از اولي كوچكتر باشد به جاي اولين . شوند و سپس سومين عنصر با عناصر اول و دوم مقايسه ميشود تر و از دومي كوچكتر باشد، بين اگر عنصر سوم از اولي بزرگ . عنصر مي نشيند و عناصر قبلي به سمت راست هل داده ميشوند

پس در اين روش هميشه عناصر قبل از عنصري . ( آنها درج ميشود و عنصر دوم به بعد يكي به سمت راست هل داده ميشود اين روال براي بقيه عناصر نيز اجرا ميشود و هر عنصر در جاي خودش قرار مي .) كه ميخواهيم مرتبش كنيم، مرتب هشتند

. است O(n 2 ) مرتبه ي پيچيدگي اين الگوريتم . عناصر مرتب شوند گيرد تا تمام و . مرتب سازي انتخاب ميكنيم ) Pilot ( در اين الگوريتم يك عنصر را بعنوان محور ): Quick Sort ( مرتب سازي سريع . ۴

چپ خودش حاال بخش . بريم تمام عناصر كوچك تر از آن را به سمت چپ آن برده و عناصر بزرگ تر را به سمت راستش مي يعني در سمت چپي ها . يك بخش جديد است كه با الگوريتمي كه گفتيم آنرا مرتب ميكنيم و سمت راست را نيز همينطور

Pilot را به سمت چپ آن و عناصر بزرگتر از Pilot در نظر ميگيريم و عناصر كوچكتر از Pilot دوباره يك عنصر را بعنوان

دوباره الگوريتم را روي يك چهارم هاي به وجود آمده اجرا ميكنيم و اينكار را . ي بريم م Pilot اين قسمت را ، به سمت راست اما در حال نرمال . است O(n 2 ) مرتبه پيچيدگي اين الگوريتم در بدترين حالت . آنقدر ادامه ميدهيم تا كل آرايه مرتب شود

O(nlogn) ب مي آيد است كه كمترين مرتبه پيچيدگي براي مرتب سازي اعداد به حسا . عمل مي كند و آرايه را به چند آرايه ) Recursive ( اين الگوريتم به روش بازگشتي ): Merge Sort ( مرتب سازي ادغام . ۵

۴ دو با هم ادغام مي كند تا آرايه هاي مرتب سپس آرايه هاي كوچك را دو به . دو عنصري تقسيم كرده و آنها را مرتب مي كند . عنصري و به همين ترتيب پيش مي رود تا آرايه اصلي بصورت مرتب شده ظاهر شود ۸ عنصري ايجاد شوند و بعد آرايه هاي

. است O(nlogn) مرتبه پيچيدگي اين الگوريتم

Page 7: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

درخت . ( مي سازد Maxheap در اين روش برنامه از كل آرايه داده شده يك درخت ): Heap Sort ( مرتب سازي هرمي . ۶

مكس هيپ درختي دودويي و كامل است كه مقدار ذخيره شده در هر گره، بزرگتر و يا مساوي مقدار ذخيره شده در گره سپس مقدار ماكزيمم را از درخت حذف مي كند و آن را در انتهاي آرايه مي گذارد و دوباره از بقيه اعداد يك ) است فرزندانش

در اين روش . مي سازد و باز روش مذكور را روي آن نيز اعمال مي كند تا دومين عدد بزرگ يافت شود Maxheap درخت . است O(nlogn) ن الگوريتم مرتبه پيچيدگي اي . آرايه از آخر به اول مرتب مي شود

. است را مشاهده كنيد n log n در تصوير زير مي توانيد مقايسه اي بين سرعت سه الگوريتم كه مرتبه پيچيدگي شان

..... روش هاي فوق در ادامه مطلب به تفصيل شرح داده خواهند شد و از لحاظ پيچيدگي زماني، معايب و مزايا، سورس كد الگوريتم و . خواهند شد بررسي

با ما همراه باشيد

Page 8: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) Bin Sort ( مرتب سازي سطلي . الف

for (int i=0; i<m; i++) //O(m)

bin[i] = ‐1;

for (int i=0; i<n; i++)

bin[a[i]] = a[i]; //O(n)

J=0;

for (int i=0; i<m; i++)

If (bin[i]!=‐1) //O(n+m)

a[j] = b[i];

j++;

اگر بخواهيم . بايد توجه نمود كه در اين الگوريتم عناصر تكراري نمي توانند باشند . پيروي مي كند O(m+n) اي اين الگوريتم از ر زمان اج . عناصر تكراري هم داشته باشيم بايد براي هر خانه آرايه يك ليست پيوندي در نظر بگيريم

a:

bin:

a:

) Topological Sort ( مرتب سازي توپولوژي . ب

در اين صورت يك روش براي مرتب سازي رئوس اين گراف آن است كه به شيوه . فرض كنيد گرافي داريم كه جهت دار و فاقد دور است آن را حذف مي انتخاب نموده سپس آن راس و تمام يال هاي متصل به ابتدا راسي را كه درجه ورودي آن صفر است : زير عمل كنيم

و دقيقا مشابه DFS بديهي است كه اين روش برگرفته از روش . اين روند را آنقدر ادامه مي دهيم تا تمام رئوس گراف پيموده شوند . كنيم است زيرا زمان شرايط محدودكننده از θ(ΙAΙ + ΙNΙ) در نتيجه زمان اجراي آن در حد . آن است اما با شرايط محدود كننده بيشتر

θ(1) ه ب . بايد توجه داشت كه جواب منحصر به فرد نمي باشد و چند خروجي مختلف از اين الگوريتم مي توانيم داشته باشيم . است : عنوان مثال داريم

5 ,6 ,4 ,2 ,3 ,1 : براي اين مثال يكي از خروجي ها مي تواند به اين صورت باشد

3 7 2 8 1

‐1 1 2 3 ‐1 ‐1 ‐1 7 8

1 2 3 7 8

Page 9: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) Binary Insertion Sort ( مرتب سازي دودويي درجي . پ

Binary Insertion Sort (A[1…n])

for (i=1; i<n; i++)

temp = A[i];

left = 1;

right = i;

Binary Search Algorithm // For Array A, temp = A[i], left = 1, right = i;

for (j=i; j>left; j‐‐)

swap (A[j‐1], A[j]);

Worst Case ) بدترين حالت (

Best Case ) بهترين حالت (Average Case

) حالت ميانگين (Insertion sort O(n2) O(n2) O(n2)

Binary insertion sort O(n2) O(nlogn) O(n2)

) Counting Sort ( مرتب سازي شمارشي . ت

for i←0 to k do //k is maximum of elements

c[i]←0

for j←1 to n do

c[a[j]]←c[a[j]]+1;

for i←2 to k do

c[i]←c[i] + c[i‐1];

for j←n downto 1 do

b[c[a[j]]]←a[j];

c[a[j]]←c[a[j]] – 1;

مقايسه [!log n] هر الگوريتم مرتب سازي مبتني بر مقايسه در بدترين حالت حداقل . . مي باشد θ(n+k) زمان اجراي اين الگوريتم از θ(nlogn) مي باشد اما اين الگوريتم مي تواند در زماني كمتر از θ(nlogn) پس مستقل از نوع ورودي در بدترين حالت از . نياز دارد

. نيز صورت بپذيرد

Page 10: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) Shell Sort ( مرتب سازي پوسته اي . ث

void shell sort (int gap, int A[1…n])

while ((gap/=2)>=1)

for (i=0; i<length(A); i++)

int j=i;

while ((j>=gap) && (A[j‐gap]>A[j]))

swap (A[j‐gap], A[j])

j‐=gap;

در هر بار عبور نصف مي گردد و عناصر با اين فاصله gap سپس اين . ي به اندازه طول آرايه در نظر مي گيريم gap در اين الگوريتم ابتدا با هم مقايسه مي شوند و در ۴ در اين مثال ابتدا از سر آرايه عناصر با فاصله . مورد دقت فرماييد به مثالي در اين . با هم مقايسه مي گردند

سپس طول فاصله نصف شده و بايد . با هم عوض مي شوند ۱ و ۴ با هم و جاي ۷ و ۶ صورت لزوم با هم جابجا مي گردند، پس جاي با هم مقايسه شده ۸ و ۶ با هم جابجا مي شوند سپس ۱ و ۲ در اين قسمت ابتدا . با هم مقايسه شوند ۲ دوباره عناصر آرايه از اول با فاصله

و الي آخر تا اينكه فاصله از يك كمتر شود و از الگوريتم خارج مي گرديم كه در ۵ با ۲ و جابجايي صورت نمي پذيرد و به همين ترتيب . اين حالت آرايه به صورت مرتب شده در آمده است

. دوم اجرا نشود While بهترين زمان هنگامي است كه

Page 11: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Worst Case ) بدترين حالت (

Best Case ) بهترين حالت (Average Case

) حالت ميانگين (Shell Sort (n 1.5 ) O(nlogn) (n 1.25 )

) Bucket Sort ( مرتب سازي سطلي . ج

اين الگوريتم با فرض اينكه ورودي ها به طور تصادفي و به صورت . انجامد به طور متوسط در يك زمان خاصي به طول مي اين الگوريتم هايي با سايز يكسان را به زيربازه ] ۰ و ۱ ( ٴ اين است كه بازه Bucket Sort ه ايد . كند توزيع شده اند، كار مي ] ۰ و ۱ ( ٴ يكنواخت در بازه

ها قرار واقع اين ورودي ها با توجه به مقدارشان در اين زيربازه در ( ها توزيع مي كنيم ها را در اين زيربازه كند و سپس ورودي تقسيم مي براي توليد خروجي، . اگر ورودي ها توزيعي يكنواخت داشته باشند انتظار داريم كه هر عدد در يك زيربازه قرار گرفته باشد ). گيرند مي

ليل كارايي خوب در مرتب سازي تعداد كم معموال مرتب سازي درجي به د ( را به يك روش مرتب سازي اعداد داخل هر زيربازه . هر زيربازه در كنار هم قرار مي دهيم ٴ هاي مرتب شده سپس داده . مرتب مي كنيم ) ورودي

Bucket Sort 1 : به دو دسته تقسيم مي شود و ­ Bucket Sort 2

Bucket Sort

unsigned const m=max

void Bucket Sort1 (int A[], int n)

int buckets[m];

for (int i=0; i<m; i++)

buckets[i]=0;

for (i=0; i<n; i++)

++buckets [A[i]];

for (int j=0; i=0; j<m; j++)

for (int k‐=buckets[j]; k>0; ‐‐k)

A[i++]=j;

Page 12: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Pigeon اين الگوريتم همان Hole Sort ) است و زمان اجراي آن نيز از ) الگوريتم النه كبوتري كه در ادامه بحث خواهد شد O(n+m) مي باشد .

Bucket Sort 2

. واقع شده اند مناسب است (1 ,0] است كه براي مرتب سازي داده هاي تصادفي كه در بازه Sort Bucket اين الگوريتم نوعي ديگر از

Bucket Sort2 (A)

n←[A]

for i←1 to n do

insert A[i] into list B[[nA[i]]]

for i←0 to n‐1 do

sort list B[i] with insertion sort

concatenate the list B[0], B[1], …, B[n‐1] together in order

) Pigeon Hole Sort ( مرتب سازي النه كبوتري . چ

در نظر گرفته مي شودكه اين آرايه در واقع فراواني هر u ر آرايه نامرتب يعني در اين مرتب سازي ابتدا آرايه اي به اندازه بزرگترين عنص پس اين مرتب . سپس از روي اين آرايه، آرايه اوليه را به صورت مرتب بازنويسي مي كند . عنصر در آرايه نامرتب را در خود نگاه مي دارد

. بر تعداد كل داده هاست u عناصر سازي مبتني بر فراواني هاست و جمع فراواني ها يعني همان مجموع

Page 13: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) ( ) ] [ ( 1

n k u m

k Θ = Θ ∑

=

Procedure Pigeonhole (T [1..n])

*let ] [ max i T m = , n i for ≤ ≤ 1 and ] [i T are positive integer */

n n هيچ الگوريتم مرتب سازي كه مبتني بر مقايسه باشد زمان اجراي آن كمتر از : نكته log نيست .

Procedure Pigeon Hole Sort (T[1..n])

Let m = maxT[i] T[i] €Z>0, 1<=i<=n

Array u[1..m]

for i←1 to m do //θ(m)

u[i]←0

for i←1 to n do //θ(n)

k←T[i]

u[k]++

k←1

for i←1 to m do

while u[i]≠0 do

T[k]←i

u[i]‐‐

k++

آناليز الگوريتم

While در حلقه for بار و حلقه به اندازه for به اندازه m+1 بار اجرا مي گردد، بنابراين براي اين قسمت از

: الگوريتم داريم

. مي باشد θ(n+m) مان اجراي اين الگوريتم از بنابراين ز

Page 14: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

: به مثال زير دقت نماييد

) Exchange Sort ( مرتب سازي تعويضي . ح

void Exchange Sort (int n, keytype S[])

index i, j;

for (i=1; i<=n‐1; i++)

for (j=i+1; j<=n; j++)

if (S[j] < S[i])

Exchange S[i] and S[j];

) Binary Tree Sort ( مرتب سازي درخت دودويي . خ

Inorder به صورت BST اگر درخت . براي مرتب سازي استفاده مي شود ) BST ( در اين روش از در خت هاي جستجو دودويي

. پيمايش شود دنباله به دست آمده به صورت صعودي خواهد بود

گر آرايه ورودي كامال مرتب باشد درخت جستجوي دودويي به صورت درخت ا . كارآيي نسبي اين روش به ترتيب اوليه داده ها بستگي دارد . گره دوم به دو مقايسه، گره سوم به سه مقايسه نياز دارد . در اين مورد براي اولين گره يك مقايسه انجام مي گيرد . مورب خواهد بود

: بنابراين تعداد كل مقايسه ها عبارتست از

. ت اس o(n 2 ) تعداد مقايسه ها از

a ، نصفي از اعداد كوچكتر و نصف ديگر بزرگتر از OC از طرف ديگر اگر داده ها طوري سازمان دهي شده باشند براي عدد خاصي مانند

. خواهد بود log 2 (n) در چنين موردي عمق درخت دودويي حاصل . باشند درخت متعادل ايجاد ميگردد

. است L برابر L و تعداد مقايسه هاي الزم جهت قرار دادن يگ گره در سطح l‐1 2 برابر با L تعداد گره هاي هر سطح مثل

Page 15: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

. عمق درخت مي باشد d كه

. است o(nlogn) مي توان از طريق رياضي نشان داد كه نتيجه مجموع از

ادل بودن درخت خوشبختانه مي توان نشان داد كه اگر احتمال هر ترتيب ممكني از ورودي يكسان در نظر گرفته شود، احتمال متع ولي زمان متوسط مرتب . اگر چه ثابت تناسب در حالت متوسط از بهترين حالت بيشتر است . نتيجه، از متعادل نبودن آن بيشتر است

. است O(n 2 ) مرتب سازي درخت دودوئي از ) ورودي مرتب ( اما در بدترين حالت . است O(nlogn) سازي درخت دودوئي از

رخت دودوئي همانند مرتب سازي ادغام به فضاي كمكي به طول آرايه ورودي نياز دارد كه به صورت توجه كنيد روش مرتب سازي د مساله پايدار بودن در اين روش به علت طرفي عدم وجود عناصر . پس اين روش مرتب سازي درجا نمي باشد . جلوه مي كند BST درخت

. با كليدهاي يكسان مطرح نمي باشد

است O(n 2 ) و در بدترين حالت O(nlogn) مرتبه اجرايي اين الگوريتم در بهترين حالت و حالت متوسط • . عنصر نيازمند است پس اين روش درجا نيست n مشكل اصلي اين روش اين است كه براي مرتب كردن به يك آرايه كمكي با • . مطرح نيست مساله پايدار بودن به دليل فرض عدم وجود عناصر با كليدهاي يكسان •

) Radix Sort ( مرتب سازي مبنايي . د

ورودي ها را به بخش . دهد اتجام مي O(kn) را در زمان k ثابت و اعضايي با طول ٴ مرتب سازي مبنايي الگوريتمي است كه ليستي با اندازه سپس ابتدا ليست ) به ارقامش اگر يك كلمه است آن را به حرف هايش مي شكنيم و اگر عدد است آن را ( هاي كوچكي تقسيم مي كنيم

به . ، تا در نهايت بر اساس پرارزش ترين بيت دومين بيت سپس بر اساس م مرتب مي كني ) حرف يا رقم ( را بر اساس كم ارزش ترين بيت . د شو ليست مرتب مي مرحله k اين ترتيب پس از

. شود استفاده مي ها و مرتب سازي اعداد واژه نامه ٴ اين روش مرتب سازي پايدار است و در تهيه • . است O(n 2 ) و در بدترين حالت از O(nlgn) اجرايي اين الگوريتم در بهترين حالت از ٴ مرتبه •

24 15 67 34 12 22 87 85 74 9

رقم يكان0 1 2 121 22 3 4 24 34 74 5 15 85 6 7 67 87 8 9 9

رقم يكان0 09 1 12 15 2 22 24 3 4 5 6 67 7 74 8 85 87 9

) ) ( ( ي اجرا اين الگوريتم مرتبه n n O α باشد كه مي ) (n α حداكثر تعداد ارقامي است كه بين n عدد موجود است .

Listnew List

Page 16: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Procedure RadixSort (int max List[1..n])

/*let max length m = , Positive Integer */

/*let of List ] 9 .. 0 [ Pointer */

/*let of ListNew ] 9 .. 0 [ Pointer */

do n to i for 1 :=

]) [ ], [ ( 10 ]% [

i mainlist x list addq i mainlist x =

do m to i for 1 1 − =

do to j for 9 0 =

]) [ ( j list while

); ], [ ( ; 10 /

); 1 ( 10 %

]); [ (

^

^

x j listnew addq I z y i x z

j list addq x

=

+ =

=

; ;

;

p list list listnew

listnew p p; point

= =

=

در اين روش ابتدا عناصر را به ترتيب . است Stable Sort اين الگوريتم از نوع . در اين الگوريتم بين عناصر مقايسه اي صورت نمي پذيرد حال عناصر را به ترتيب دهگان مرتب مي نماييم و وارد . سپس عناصر را به ترتيب وارد آرايه اصلي مي نماييم . يكان مرتب مي نماييم

O(nα(n)) زمان اجراي اين الگوريتم . يم و وارد آرايه مي نماييم و به همين ترتيب ادامه مي دهيم تا آرايه مرتب گردد ليست مي نماي

. عدد است n حداكثر تعداد ارقام ظاهر شده بين α(n) مي باشد كه

به مثال زير دقت كنيد

ه مي كنند يا هنگامي كه ليست بزرگي از اسامي را به مرتب كردن مبنايي روشي است كه افراد بسياري به طور شهودي از آن استفاد به طور مشخص . حرف الفباي انگليسي است ۲۶ است، علت آن ۲۶ در اينجا مبنا . صورت الفبا مرتب مي كنيم از آن استفاده مي كنيم

وند كه در آن دسته اول از دسته مرتب مي ش ۲۶ به بيان ديگر اسامي به . ليست اسامي نخست بر اساس حروف اول هر اسم مرتب مي سود . شروع مي شود و الي آخر B اسامي اي تشكيل مي شود كه حرف اول آن ها با

۱۲ اگر هيچ اسمي براي مثال بيشتر از . در طي مرحله دوم هر دسته بر اساس حرف دوم اسم به صورت الفبايي مرتب مي شود و الي آخر حال اين روش را براي مرتب سازي تعدادي عدد شرح . ورت الفبايي مرتب مي شوند مرحله به ص ۱۲ حرف نداشته باشد اسامي حداكثر در

. براي هر رقم با شروع از كم ارزش ترين به باارزش ترين رقم اين اعمال را انجام مي دهيم . مي دهيم

Page 17: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

صفر قرار مي ۱۰ را در يكي از كه در آرايه قرار دارد خوانده و بر اساس ارزش رقمي كه در حال پردازش است آن هر عدد را به ترتيبي در بردار اوليه . شماره گذاري شده است ۹ سپس هر صف را با شروع از صفي كه با رقم صفر شماره گذاري شده تا صفي كه با رقم . دهيم

توجه . آرايه مرتب خواهد شد ) با شروع از رقم سمت راست به سمت رقم سمت چپ ( مي نويسيم وقتي اين عمل براي دو رقم انجام گرفت . كنيد كه در اين روش مرتب سازي ابتدا بر اساس ارقام كم ارزش صورت مي گيرد

: شكل زير مراحل مرتب سازي آرايه را با روش مرتب سازي مبنا نشان مي دهد : مثال

25, 57, 48, 37, 12, 92, 86, 33

نويسيم فقط رقم يكان اعداد را نگاه كرده و هر يك را در صف مربوطه مي : گذر اول

48 ,37 ,57 ,86 ,25 ,33 ,92 ,12 : آرايه

. آرايه به دست آمده را بر اساس رقم دوم در يكي از صف ها قرار مي دهيم

92 ,86 ,57 ,48 ,37 ,33 ,25 ,12 : آرايه بعد از گذر دوم

الگوريتم اين مرتب سازي به صورت . اشتيم گذر نياز د ۵ رقمي بودند به ۵ اگر اعداد . گذر آرايه مرتب شد ۲ چون اعداد دو رقمي بودند در : زير است

For (i=1; i<=5; i++)

Page 18: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

For (j=0; j<n; j++)

K=ith digit of x[j];

place x[j] at rear of q[k];

For (j=0; j<10; j++)

Place element of q[j] in next sequential position of x;

پيچيدگي مرتب سازي مبنايي

d=10 مثال براي ارقامي دهدهي . نمايش مبنا باشد d فرض كنيد . داده شده است A1, A2, ……., An عنصري A ليست A فرض كنيد

. رقم زير نمايش داده مي شود s با Ai هم چنين فرض كنيد هر عنصر . است d=2 و براي بيت ها d=26 براي حروف ها . باشد

رقم مقايسه مي d با هر يك از dik هر رقم k در مرحله . مرحله يعني تعداد ارقام هر عنصر است s الگوريتم مرتب كردن مبنايي نيازمند

: تعداد مقايسه ها براي الگوريتم به صورت زير است C(n) از اين رو . شود

از اين . s=log n d در بهترين حالت . c(n) = o (n 2 ) از اين رو s=n بدترين حالت . بستگي دارد n به s است اما n مستقل از d اگر چه ها كوچك Ai تعداد ارقام در اين نمايش s به بيان ديگر مرتب كردن مبنايي تنها وقتي خوب اجرا مي شود كه c(n) = o(nlogn) رو

با استفاده اين عيب را مي توان . خانه حافظه احتياج داشته باشد d*n عيب ديگر مرتب سازي مبنايي اين است كه ممكن است به . باشد. خانه حافظه نيازمنديم n*2 با وجود اين همچنان به . از ليست هاي پيوندي به جاي آرايه بهحداقل رساند

Page 19: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) Insertion Sort ( الگوريتم مرتب سازي درجي . ذ

شود به طوري كه مي شود و در صورت لزوم با عنصر اول جابجا در مرتب سازي درجي،ابتدا عنصر دوم با عنصر اول ليست مقايسه مي سپس عنصر سوم به ترتيب با دو عنصر قبلي خود يعني عناصر دوم و اول . عناصر اول و دوم تشكيل يك ليست مرتب دوتايي را بدهند

گيرد به طوري كه عناصر اول و دوم و سوم تشكيل يك ليست مرتب سوم و دوم و اول مقايسه و درجاي مقايسه و درجاي مناسبي قرار مي i گيرد به طوري كه عناصر اول و دوم و سوم و چهارم تشكيل يك لسيت مرتب چهارتايي را بدهند و در حالت كلي عناصر ب قرار مي مناس تايي را بدهند و i عنصر تشكيل يك ليست مرتب i گردد تا در مكان مناسب قرار گيرد به طوري كه عنصر قبلي خود مقايسه مي i‐1 ام با

. يابد كامل ليست ادامه مي اين روند تا مرتب شدن

void Insertion Sort (int A[] , int n)

int i , j ,temp;

for (i =1 ; i < n ; i++)

temp = A[i];

for (j = i ; j >0 && A[j‐1]>temp; j‐‐)

A[j]=A[j‐1];

A[j]=temp;

فرض كنيد . است يم طراحي شده ه د هايي كه معموال خود ما بصورت دستي انجام مي الگوريتم مرتب سازي درجي بر اساس مرتب سازي : ه اند بصورت نامرتب و كنار هم روي زمين چيده شد ۱۰ تا ۱ هاي دسته كارتي با شماره

۵ ۲ ۹ ۳ ۱ ۱۰ ۴ ۶ ۸ ۷

: يم ه د نسبت به كارت اول در جاي مناسب خودش قرار مي ا كارت دوم ر

۲ ۵ ۹ ۳ ۱ ۱۰ ۴ ۶ ۸ ۷

جاي ۵ و ۲ در مقايسه با ۹ چون . يم ه د نسبت به دو كارت قبلي در جاي مناسب قرار مي ا اين كارت ر . د رس نوبت به كارت سوم مي حاال : كنيم جاي اين كارت رو نسبت به سه كارت قبلي مشخص مي . رسيم بدون هيچ جابجايي به كارت چهارم مي د درستي دار

۲ ۳ ۵ ۹ ۱ ۱۰ ۴ ۶ ۸ ۷

. يم ه د تا آخر ادامه مي و به همين ترتيب

Page 20: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

عنصر i+1 ا ام مطمئن i بعد از اتمام مرحله . د كن براي مرتب كردن طي مي ا مرحله ر n‐1 ، اين روش د مشخص كن ا تعداد عناصر ر n اگه . ند اول به صورت مرتب شده هست

مرتب سازي . د هستن ده مرتب ش اي از عناصر له حتما قطعه در هر مرح : ود ش مرتب سازي درجي محسوب مي مزاياي اين مساله يكي از . د ندار ا حبابي اين ويژگي ر

Procedure insertion (T [1..n])

do n to i for 2 ←

]) [ & & 0 (

1 ] [

j T x j while

i j i T i

< >

− ← ←

1 ] [ ] 1 [

− ← ← +

j j j T j T

x j T ← + ] 1 [

ام در عناصر قبل از خود در محل j آم آرايه مرتب هستند و عنصر j‐1 ام اين الگوريتم فرض بر اين است كه عناصر اول تا j در مرحله . اين عمل انجام مي شود n تا ۲ از j حال به ازاي . مناسب درج مي شود

. خودش به تنهايي به طور بديهي مرتب است x[1] : ۱ مرحله

. مرتب شده باشند x[3], x[2], x[1] درج مي كنيم به گونه اي كه x[1] را يا قبل از يا بعد از x[2] : ۲ مرحله

.......

. به گونه اي درج مي كنيم كه كل آرايه مرتب شده باشد x[1], x[2], …….., x[n‐1] را در مكان صحيح خود در n : X[n] مرحله

مرتب سازي درجي را مي توان به صورت ديگري بازنيوسي كرد كه آن را مرتب سازي درجي دودويي مي نامند كه در آن عمل : نكته ام توسط جستجوي دودويي انجام مي شود ولي زمان اجراي آن تفاوتي نخواهد كرد j و براي پيدا كردنمحل عنصر جستج

ي كران بااليي محاسبه

) ( ) 1 1 ( 2

2 n O L i L

n

i ≤ ⇒ + − ≤ ∑

=

ي كران پايين محاسبه

) ( 1 2

n L L n

i Ω = ⇒ ≤ ∑

=

. باشد Ω ) 1 ( يعني زمان اجراي آن . اصال اجرا نشود while كمترين زمان وقتي است كه

Page 21: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) ( ) ( زمان اجراي الگوريتم درجي 2 n O L n ≤ ≤ Ω

و كران باالي آن به صورت n Ω) ( باشد كران پايين ترين الگوريتم از false هميشه while در اين الگوريتم اگر شرط

) ( )) ( ) 1 ( ( 2

2 n O i O O

n

i ∑

=

بدين منظور اين الگوريتم را در بهترين . پس به صورتي است كه به نوع ورودي بستگي دارد . مي باشد + ∋

. حالت، بدترين حالت و حالت متوسط بررسي مي نماييم

. دهيم ها متفاوت است معموال آناليز هر الگوريتم را در سه حالت زير انجام مي كران بااليي و پاييني الگوريتم در حالي كه

) Best case analysis ( آناليز در بهترين حالت - ۱

. اي باشند كه الگوريتم كمترين زمان را ببرد ها بگونه يعني ورودي

يعني . در اين حالت با ورود هر عضو جديد بايد آن عضو در همان موقعيت درج شود . شد بهترين حالت زماني رخ مي دهد كه آرايه مرتب با خواهد O(n) در نتيجه زمان اجراي الگوريتم از . است O(1) از while نبايد اجرا شود در اين حالت زمان مقايسه شرط while حلقه

. مي باشد θ(n) بوده است در نتيجه زمان اجرا از n Ω) ( گوريتم از طرفي يك كران پايين براي اين ال . بار اجرا مي شود n‐1 بود زيرا

) Worst case analysis ( آناليز در بدترين حالت - ۲

. اي باشند كه الگوريتم بيشترين زمان را سپري كند ها بگونه يعني ورودي

در نتيجه به اندازه . مقايسه نياز است i ) ام i مثل عضو ( اگر داده ها به صورت نزولي مرتب شده باشند در اين صورت با ورود هر عضو جديد) (i Ω زمان براي دستور while پس زمان الزم براي اجراي اين الگوريتم . نياز داريم Ωn 2 ي خواهد بود و از طرفي سقف بااليي برا

. خواهد بود θ(n 2 ) است در نتيجه زمان اجراي الگوريتم از O(n 2 ) اجراي الگوريتم

) Average case analysis ( آناليز در حالت متوسط - ۳

در اين حالت زمان . دهد ها بصورت صعودي، مرتب شده باشند بهترين حالت رخ مي براي مثال در آناليز مرتب سازي درجي اگر ورودي دهد كه در اين حالت زمان اجراي الگوريتم ها به شكل نزولي مرتب شده باشند بدترين حالت رخ مي اگر داده . خواهد بود n Θ) ( الگوريتم

) ( 2 n Θ هاي مشخص زمان اجرا چه خواهد بود ي حالت متوسط يعني در حالت متوسط با ورودي محاسبه . خواهد بود .

داده، زمان n در اين گونه موارد در حالت كلي براي . ها وجود دارد، آناليز در حالت متوسط است تي كه در آناليز الگوريتم يكي از مشكال . باشد حالت مي n ! داده بعنوان ورودي در نظر گرفته شود و n تواند اين هاست كه مي هاي مختلف داده الزم براي بدست آوردن ترتيب

ولي از لحاظ . كنيم ها را محاسبه كرده و جمع نموده و بر تعداد آنها تقسيم مي حالت، زمان n ! ي متوسط اين بنابراين براي محاسبه. است و اين زمان خيلي خيلي زياد است n O) ! ( منطقي نشدني است، زيرا زمان الزم براي اين عمليات

Page 22: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

براي مثال در الگوريتم . كنيم هاي خاص استفاده مي در روش آماري از تكنيك . باشد تر استفاده از روش آماري مي وش منطقي بنابراين رInsertion Sort از مفهوم Partial Rank ) ي جزئي عنصر منظور از رتبه . كنيم استفاده مي ) ي جزئي رتبه ] [i T ي از آرايه ] .. 1 [ i T

] 1 .. [ ي در آرايه i T] [ عبارت است از محل قرار گيري i T 1 .. [ ي پس از مرتب سازي زير آرايه [ i T . ي در اين الگوريتم حلقه while

. كند را محاسبه مي i T] [ ي جزئي عنصر رتبه

ها بهتر است ولي وقتي تعداد داده ها زياد باشد چون بهترين sort از بقيه insertion sort هنگامي كه تعداد داده ها كم است رفتار حالت خيلي دير اتفاق مي افتد و نمي تواند مناسب باشد

) Heap Sort ( مرتب سازي هرمي . ر

يك كليد (node) هر گره ع ك درخت دودويي كامل است با ارتفا ي Heap . باشد مي (RAM) يك الگوريتم مرتب سازي در حافظه . شود ذخيره مي (Array) بصورت يك آرايه . باشد مي (Parent) تر يا برابر كليد گره پدر بيشتر ندارد كه بزرگ

چگونه است؟ Heap Sort در Insert الگوريتم

. شود اضافه مي Heap ركورد جديد در آخر ) ۱ . شود تر بود محل آن با محل گره پدر تعويض مي شود و اگر مقدار آن كوچك پدر مقايسه مي كليد آن با كليد گره ) ۲ . يابد ادامه مي (Root) تا ريشه درخت ) ۲ ( در صورت لزوم عمل ) ۳

چگونه است؟ Heap Sort در Remove الگوريتم

. شود باشد خارج مي مي Root ترين كليد كه در گره كوچك ) 0 . گردد منتقل مي Root به گره ) آخرين گره ( ترين كليد بزرگ ) 1 . شود شود و اگر بيشتر بود جاي آن دو تعويض مي ترين كليد فرزند مقايسه مي كليد آن با كوچك ) 2 . گردد تكرار مي Heap تا آخر ) ۳ ( در صورت لزوم عمل ) 3

ترتيب الگوريتم كارآمدي به نام مرتب سازي هرمي را مي توان به اين . هرم تقريبا مرتب است زيرا هر مسيري از ريشه به برگ مرتب است اين روش مرتب سازي . اين مرتب سازي همانند ساير مرتب سازي ها بر روي يك آرايه صورت مي گيرد . با استفاده از آن به دست آورد

ست و برخالف مرتب سازي سريع به ا O(nlogn) پيچيدگي آن همواره . همانند مرتب سازي سريع از يك تابع كمكي استفاده مي كند. صورت بازگشتي نيست

Page 23: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

ويژگي هاي مرتب سازي هرمي

. است O(nlogn) كليه اعمال در مرتب سازي هرمي از مرتبه • . روي آرايه ساخته مي شود heap در اين روش درخت • . مرتب سازي هرمي از نوع درجا مي باشد • . نمي باشد (stable) اين الگوريتم پايدار •

: توضيح الگوريتم بايد دو الگوريتم مورد نياز را يادآوري كنيم قبل از

• Adjust : در اين الگوريتم فرض بر اين است كه درختي دودويي و كامل وجود دارد كه از Heap بودن زير درخت چپ و بودن كل درخت وجود ندارد و لذا شبيه عمل حذف عنصر بيشينه از يك heap راست آن مطمئن هستيم ولي تضميني بر

Maxheap تا جاي مورد نياز به سمت برگ ها پيش ) در صورت وجود ( عمل مي كنيم و ريشه را با مقايسه با فرزندانش . خواهد بود O(log n) ميريم و لذا داراي مرتبه زماني

• Heapify : مل به يك در اين الگوريتم يك درخت دودويي كا Heap با شروع از عنصر . كامل تبديل مي شود n/2 ) آخرين مرتبه زماني . مي كنيم Adjust به سمت عنصر سر ليست پيش مي رويم و آن را در عناصر بعد از خود ) عنصر داراي فرزند

. مي باشد O(n) الگوريتم برابر با

Procedure Adjust (A, i, n)

j←2*i

item←A(i)

while ( j<=n) do

if j<n and A(j) < A(j+1) then j←j+1 endif

if item<=A(j) then

exit

else

A(j/2)←A(j)

j←2*j

endif

repeat

A(j/2)←item

Procedure heapify (A, n)

For i← n/2 to 1 do

Call adjust (A, i, n)

Repeat End.

Page 24: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

. است O(n) به دليل زير داراي مرتبه زماني Heapify الگوريتم : نكته

ام i واضح است كه تعداد گره هاي سطح . مي باشد log (n+1) برابر با عمق درخت k نشان دهنده سطح گره هاي درخت، i كه در آن به كمك الگوريتم ( تبديل مي كنيم Heap در مرتب سازي توده اي ابتدا ليست يا آرايه را به يك . مي باشد i‐1 2 درخت حداكثر برابر با

Heapify) ( س بعد از و سپ Heap شدن ليست عناصر سر درخت ) را با عنصر انتهاي ليست جابجا كرده و دوباره بدون ) عنصر ماكزيمم بار صورت n‐1 اين عمل . تبديل مي كنيم heap به يك adjust درخت را با كمك الگوريتم ) در انتها ( در نظرگرفتن عنصر جابجا شده

. ه كمينه از انتهاي آرايه به سمت ابتداي آرايه چيده خواهند شد مي گيرد و به اين ترتيب عناصر از بيشينه ب

. جهت اضافه كردن تك تك عناصر به توده كمك مي گيرد insert روش ديگري براي ايجاد يك توده وجود دارد كه در آن از رويه : نكته : مي باشد به صورت زير است O(nlogn) اين روش كه داراي مرتبه زماني

Procedure Heapify2 (A, n)

for i←2 to n do

call insert (A, A[i], i)

repeat

end.

. گذر روي ليست داريم n‐1 ايجاد مي كنيم و سپس adjust بزرگ با استفاده از فراخواني متوالي هرم براي مرتب سازي ليست ابتدا يك ولين ركورد شامل بزرگ ترين كليد است اين ركورد اكنون در چون ا . را با آخرين ركورد تعويض مي كنيم heap در هر گذر اولين ركورد

بعنوان مثال در اولين گذر ركوردي با . را كاهش داده و دوباره آن را تراز مي كنيم heap موقعيت مرتب شده خودش است پس اندازه امين گذر i مي گذاريم و n‐1 محل امين محل مي گذاريم، در گذر دوم ركوردي با دومين كليد بزرگي را در n بزرگ ترين كليد را در

. مي گذاريم n‐i+1 مين كليد بزرگي را در محل i ركوردي با

همچنين به دليل غير بازگشتي بودن . مي باشد O(n.logn) از اين رو الگوريتم مرتب سازي توده اي در همه حاالت داراي مرتبه زماني . خواهد بود O(1) داراي حافظه مصرفي

Procedure HeapSort (A, n)

Call Heapify (A, n)

for i←n to 2 do

swap (A(i), A(1))

call adjust (A, 1, i‐1)

repeat

end.

Page 25: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

ده اي به صورت صعودي مرتب نماييد آرايه زير را به روش مرتب سازي تو : مثال

Heap فاز اول الگوريتم ( تبديل مي كنيم Heap آرايه را به يك Heapify ابتدا به كمك الگوريتم Sort (

Page 26: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

: را اجرا مي كنيم Heap Sort حال فاز دوم الگوريتم

Page 27: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Page 28: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Procedure Heap‐Sort (T[1..n])

Make‐Heap (T)

For i←n step‐1 to 2 do

Exchange (T[1] and T[i])

Sift‐Down (T[1..i‐1], 1)

End

End

) Selection Sort ( مرتب سازي انتخابي . ز

به A الگوريتم مرتب كردن انتخابي براي مرتب كردن آرايه . در حافظه است A[n], …., A[2], A[1] عنصر n با A فرض كنيد آرايه جاي آن را با ( نخست كوچك ترين عنصر داخل ليست را پيدا كرده و آن را در مكان اول ليست قرار مي دهد . صورت زير عمل مي كند

وم داخل ليست را پيدا كرده و آن را در مكان دوم ليست قرار مي دهد و الي آنگاه كوچكترين عنصر د ) عنصر اول ليست عوض مي كند آخر

. در اين نوع پياده سازي زمان اجرا با داده هاي ورودي ارتباطي ندارد

: به عنوان مثال فرض كنيد ليست زير بايد به طور صعودي مرتب شود

77, 33, 44, 11, 88, 22, 66, 55

مي يابيم و اين عنصر را با عنصر اول تعويض ۴ كردن كوچك ترين عنصر پيمايش مي كنيم و آن را در موقعيت ابتدا ليست را براي پيدا . در نتيجه كوچك ترين عنصر ليست در ابتداي ليست قرار مي گيرد . مي كنيم

11, 33, 44, 77, 88, 22, 66, 25

مي يابيم و اين عنصر را با عنصر دوم ۶ يم و آن را در موقعيت تا انتهاي ليست، كوچك ترين عنصر را پيدا مي كن ۲ اكنون از موقعيت . ليست تعويض مي كنيم و اين عنصر نيز در موقعيت مناسب خود قرار مي گيرد

11, 22, 44, 77, 88, 33, 66, 55

. بار تكرار مي كنيم تا همه عناصر در جاي مناسب خود قرار بگيرند n‐1 مراحل فوق را

Page 29: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

void Selection Sort(int A[], int n)

int i, j, minpos, t;

for (i=0; i<n‐1; i++)

Minpos =i;

for (j=i+1; j<n; j++)

if (A[j]<A[minpos])

minpos=j

t=A[minpos];

A[minpos]=A[i];

A[i]=t;

ي كران بااليي محاسبه

) (

) 1 ) 1 ( ( 1 ) 1 (

) 1 1 (

2

1

1 1

1

1 1

n O L

i n i n L

L

n

i

n

i

n

i

n

i

+ + − + = − + ≤

+ ≤

∑ ∑

∑ ∑ −

= =

= =

ي كران پايين محاسبه

) ( ) (

) 1 1 (

2

2

1

1 1

n L n L

L n

i

n

i j

Θ ∈ ⇒

Ω ∈

≤ + ∑ ∑ −

= + =

ي دو الگوريتم مرتب سازي حبابي و مرتب سازي انتخابي، دركل فرقي با هم ندارند، ولي الگوريتم مرتب سازي انتخابي در از مقايسه . ضريب بدتر است

زماني اجراي الگوريتم انتخابي ي مرتبه

Page 30: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

ويژگي هاي مرتب سازي انتخابي

. مي باشد O(n 2 ) اين مرتب سازي در همه موارد داراي مرتبه زماني • . اين الگوريتم پايدار نيست و ممكن است ترتيب عناصر مساوي را در آرايه حفظ نكند •

) Quick Sort ( مرتب سازي سريع . ژ

در بين مرتب C.A.R Hoare ش توسط اين رو . اين الگوريتم از نوع تقسيم و غلبه است كه داراي ميانگين زماني بسيار مناسبي مي باشد راهبرد تقسيم و غلبه يك روش بازگشتي است كه در آن مساله اي كه بايد . سازي هاي مورد مطالعه داراي بهترين متوسط زماني مي باشد

. حل شود به مساله هاي كوچكتر تقسيم مي گردد كه هر كدام مستقال حل مي شوند

تفاوت . عداد يا به طور كلي داده ها به دو بخش تقسيم مي شوند و هر بخش جداگانه مر تب مي شود بر اساس اين الگوريتم نيز مجموعه ا : هاي عمده بين روش مرتب سازي و مرتب سازي ادغام به صورت زير هستند

كند كدام عنصر اول اينكه در روش مرتب سازي سريع يكي از عناصر مجموعه را به عنوان عنصر محوري انتخاب مي كنيم كه فرقي نمي . از مجموعه باشد

عناصر بزرگ ) ج . عنصر كوچك تر از عنصر محوري ) ب . عنصر محوري ) الف . دوم اينكه مجموعه در واقع به سه قسمت شكسته مي شود . تر از عنصر محوري

سوم اينكه در هر مرحله محل عنصر محوري در آرايه ثابت مي شود و در واقع مكانش پيدا مي شود و چهارم اينكه احتياجي به ادغام هر ) همان عضو محوري . ( مجموعه نيست بلكه در حقيقت در هر مرحله اجرا، محل يك عضو از آرايه ثابت مي شود

هر يك از دو بخش ديگر نيز به روش فوق به صورت بازگشتي مرتب مي ) Partition Phase ( بعد از يافتن محل ثابت عنصر محوري در هر ) عناصر آرايه از قبل مرتب باشند ( به راحتي قابل مالحظه است كه الگوريتم باال در بدترين وضعيت ). Recursion Phase ( شوند

و در بهترين ! خواهد بود O(n 2 ) د و لذا داراي مرتبه زماني مرحله ليست را به دو قسمت با اندازه هاي كامال دور از هم تقسيم مي كن در هر مرحله ليست به دو قسمت ) عناصر آرايه به گونه اي باشند كه در هر مرحله عنصر ميانه به عنوان قلم محوري انتخاب شود ( وضعيت

ين الگوريتم به طور متوسط نيز داراي مرتبه ا . خواهد بود O(nlogn) با اندازه نزديك به هم تقسيم مي شود و لذا داراي مرتبه زماني هم چنين از لحاظ مصرف حافظه كمكي نيز به دليل بازگشتي بودن الگوريتم در بدترين حالت برابر با . خواهد بود O(nlogn) زمانيO(n) و در بهترين حالت و حالت متوسط برابر با O(logn) خواهد بود .

Page 31: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

Procedure quick Sort (A, low, u)

if low < u then

pivot←A[low]

i←low

j←u

repeat

Do i←i+1 until A[i] > pivot

Do i←j‐1 until A[j] < pivot

if i<j then

swap (A[i] , A[j])

endif

until i>=j

swap (A[low], A[j])

quick sort (A, low, j‐1)

quick sort (A, j+1, u)

endif

end.

اين روش هم مثل روش ادغام از . ود ش ها محسوب مي محبوب و با سرعت باال براي مرتب كردن داده هاي از جمله روش اين الگوريتم ها رو به دو قسمت مجزا ه اين ترتيب كه داده د ب كن ها استفاده مي مرتب كردن داده براي (Divide and Conquer) تقسيم و حل

. ند ك مرتب مي را ها ا كل داده آن ه و با مرتب كردن تقسيم

void quick_sort (int arr[ ] , int low , int high) if (low < high) int p = partition(arr , low , high); quick_sort(arr , low , p – ۱); quick_sort(arr , p + ۱ , high);

: مثال

5 1 17 4 48 7 3 9 8 5 25

1 2 3 4 5 6 7 8 9 10 11

Page 32: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

P= T[i] = 5

k←i

L←j+1

5 1 17 4 48 7 3 9 8 5 25

5 1 5 4 48 7 3 9 8 17 25

5 1 5 4 3 7 48 9 8 17 25

K از L جلو افتاد، پس جاي عنصر L ام با P عوض مي شود .

3 1 5 4 5 7 48 9 8 17 25

الگوريتم محاسبه زمان اجراي

: آناليز در بدترين حالت •

. است θ(n) بايد از دو طرف يكي اول و ديگري آخر آرايه حركت كرد پس هميشه از pivot از آنجا كه در

محل فعلي i كه (n‐1+1) در هر بار يا در جاي خود و يا در خانه متقارن يعني pivot بدترين حالت زماني اتفاق مي افتد كه . ني آنكه يا داده ها صعودي اند و يا نزولي مرتب شده اند يع . آنست قرار گيرد

آناليز الگوريتم در بهترين حالت •

در نقاط مياني باشد، در اين صورت زمان اجراي الگوريتم برابر pivot در اين الگوريتم بهترين حالت هنگامي اتفاق مي افتد كه : است با

k L

k L

L K

Page 33: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

) Merge Sort ( ادغامي مرتب سازي . س

اي از اعداد داشته باشيم و اين مجموعه را به دو بخش تقسيم كنيم و هر بخش را جداگانه مرتب كنيم و حاصل را به گونه اگر مجموعه . ادغام كنيم كه رعايت ترتيب شود آن گاه كل مجموعه اعداد مرتب خواهند شد

ترتيب يعني تقسيم به مجموعه هاي كوچك تر و در اين روش بعد از تقسيم كردن داده هاي اوليه به دو بخش، هر بخش را نيز به همين انجام مي دهيم؟ تا زماني كه تعداد عناصر هر ليست اما شكستن زيرليست ها را تا چه زماني . مرتب كردن و ادغام آن ها مرتب مي كنيم

احل كار الگوريتم به صورت مر . برابر با يك شود آن گاه دو ليست كوچك تك عنصري را ادغام كرده و به صورت بازگشتي عمل مي نماييم : خالصه در ذيل آمده است

. اگر تعداد داده هاي يكي يا كمتر است نيازي به مرتب كردن نيست برگرد

در غير اين صورت وسط داده ها را پيدا كن

مرتب كن merge sort نيمه اول داده ها را به روش

مرتب كن merge sort نيمه دوم داده ها را به روش

. مرتب شده را به گونه اي ادغام كن كه حاصل مرتب باشد دو نيمه

Procedure Merge Sort(A, low, u)

If low<u then

mid←(low+u)/2

Merge Sort(A, low, mid)

Merge Sort (A, mid+1, u)

Merge Sort (A, low, mid, u)

Endif

هم چنين به دليل بازگشتي بودن به . مي باشد O(nlogn) ماني از اين رو الگوريتم مرتب سازي ادغامي در همه حاالت داراي مرتبه ز كاهش داد O(1) ولي با غير بازگشتي نوشتن الگوريتم مي توان حافظه مصرفي را به . از حافظه پشته استفاده مي كند O(logn) اتدازه

شد ولي زمان واقعي الگوريتم بيشتر خواهد

Procedure Merge Sort(T[1..n])

If n is suf iciently small then insertion sort (T[1..n])

elseu[1…n/2]←T[1…n/2], v[1…n/2]←T[1+n/2…n]

Merge Sort (u[1…n/2])

Merge Sort (v[1…n/2])

Merge (u, v, T)

Page 34: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

. استفاده مي شود insertion sort كوچك باشد احتمال مرتب بودن زياد است پس از آرايه در حالتي كه

Procedure Merge (u[1..m+1], v[1..n+1], T[1..m+n])

i, j←1

u[m+1]=v[n+1]←∞

for k←1 to m+n do

if u[i]<v[j]

T[k]←u[i]

I++

Else

T[k]←v[j]

j++

آرايه زير را با اين روش مرتب مي نماييم

آناليز الگوريتم

Page 35: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

چنين هم . خواهد شد stable تبديل كنيم if u[i]<=v[j] را به عبارت if u[i]<v[j] نمي باشد اما اگر عبارت Stable اين الگوريتم . نمي باشد زيرا از حافظه كمكي استفاده مي نمايد inplace اين الگوريتم

) Quick Sort ( حبابي مرتب سازي . ش

ر صورتي كه عنصر اول بزرگتر عنصر اول را با با عنصر دوم مقايسه كرده، و د . داده به صورت صعودي مرتب شوند n خواهيم فرض كنيد مي دهيم و همينطور عناصر سوم و چهارم ، الي همين كار را با عناصر دوم و سوم انجام مي . كنيم باشد باشد جاي عنصر اول و دوم را عوض مي

دهيم اما را انجام مي حاال يك بار ديگر از اول اين كار . رسد ها به آخر ليست مي ترين عنصر بين داده وقتي اين كار تمام شد بزرگ . آخر ام ( n ‐ ۲) باز هم اين كار را تا عنصر ). ام در مرحله اول در جاي خودش قرار گرفته n عنصر ( دهيم ام ادامه مي ( n ‐ ۱) اين بار تا عنصر

. شوند ها مرتب مي تا اينكه باالخره داده .... كنيم ، و بازهم تكرار مي

Procedure BubbleSort ( ] .. 1 [ n T )

do n to i for 1 1 − ← do i n to j for − ←1

]) 1 [ ], [ ( ] 1 [ ] [ + + > j T j T swap then j T j T if

كران باال محاسبه

در اين صورت زمان الزم براي مجموع اين عمليات در حد . شود اجرا مي swap برقرار است و دستور if كنيم كه شرط همواره فرض مي . است O ) 1 ( زمان

∑ ∑ ∑ ∑ −

=

=

=

=

− = − = + + − ≤ 1

1

1

1

1

1

1

1

) ( ) 1 ) 1 ( ( n

i

n

i

n

i

n

i i n i n i n L

2 ) 1 (

2 ) 1 ( ) 1 ( − = − − − ≤ n n n n n n L

) ( 2 n O L = I

كران پايين محاسبه

) ( 2

) 1 ( 1 2

1

1

1 n L L n n L

n

i j

n

i Ω = ⇒ ≤

− ⇒ ≤ ∑ ∑

+ =

= II

Page 36: Sorting Algorithms - مادسیج · ( Sorting Algorithms ) ﻱﺯﺎﺳ ﺐﺗﺮﻣ ﻱﺎﻫ ﻢﺘﻳﺭﻮﮕﻟﺍ ﺩﺍﮋﻧ ﻲﻧﺎﻛﺩﺭﺍ ﺪﻤﺤﻣ : ﻩﺪﻧﺭﻭﺁﺩﺮﮔ

) Sorting Algorithms ( الگوريتم هاي مرتب سازي

محمد اردكاني نژاد : جم و گردآورنده ر مت

الگوريتم بهترين ميانگين بدترين پايدار اي مقايسه روشIndexing بله خير O(nk) — O(nk) Radix sort Indexing بله خير O(n+k) — (O(n+k Counting sort Indexing بله خير O(n) 2 O(n) O(n) Bucket sort Indexing بله خير O(n+k) — O(n+k) Pigeonhole sort

Partitioning خير بله O(n) 2 O(nlogn) O(nlogn) Quicksort O(nlogn) — O(nlogn) Heapsort خير بله گزينشيMerging بله بله O(nlogn) — O(nlogn) Merge sort

O(nlogn) — O(nlogn) Binary tree sort بله بله درجي O(nlogn) — O(nlogn) Shell sort خير بله درجي O(n) 2 — O(n) 2 Insertion sort بله باه درجي

O(n) 2 (O(n ۲ O(n) 2 Selection sort خير بله گزينشي O(n) 2 — O(n) Bubble sort بله بله جابجايي

نام بهترين ميانگين بدترين حافظه پايدار ي ا ه س ي ا ق م O(n × n!) O(n) Bog Sort بدون حد O(1) خير بلهO(1) O(n) 2.71 — O(n) 2.71 Stooge خير بله Sort N/A — O(n) — O(n) Bead خير Sort O(n) — O(n) Pancake sorting — خير بله O(nlogn) — O(nlogn) Sorting networks — بله بله

كه مطالب اين مقاله، اكثرا برداشته شده از جزوه هاي مطرح موجود در اينترنت و اساتيد معتبر اعالم كنم در پايان بايد فقط سعي شده .... . جزوه هاي دانشگاه هاي اراك، ماهشهر، شاهرود و . باشد مي ر دانشگاه هاي آزاد و سراسري سراسر كشو

. كه كليت كار حفظ بشه و يك مرجع و منبع مناسب براي اكثر الگوريتم هاي مرتب سازي در اختيار شما قرار بگيره

با تشكر

محمد اردكاني نژاد

نوع لگوريتم هاي مرتب سازي ا سازي تعويضي مرتب سازي سريع مرتب | اي سازي شانه مرتب | ساز كوكتل مرتب | سازي حبابي مرتب سازي انتخابي مرتب Strand ساز مرتب | روان سازي مرتب | سازي هرمي مرتب | سازي انتخابي مرتب

سازي درجي مرتب سازي شكيبانه مرتب | اي كتابخانه | درختي ي ساز مرتب سازي شل مرتب | درجي سازي مرتب اي سازي غيرمقايسه مرتب كبوتري سازي النه مرتب | سازي شمارشي مرتب | سازي سطلي مرتب | اي سازي پايه مرتب

ر ديگ Bitonic سازي مرتب | سازي شبكه مرتب | سازي توپولوژيكي مرتبسازي غيرمؤثر مرتب Bogo سازي مرتب

[email protected]

www.ARDEKANINEZHAD.irwww.ARDEKANINEZHAD.ir

[email protected]