الگوریتمستان - الگوریتم مرتب‌سازی سریع

چگونه داده‌ها را سریع مرتب کنیم

✤    ۶ دی ۱۳۸۵ - آخرین به‌روزرسانی: ۷ فروردین ۱۳۹۹

روش مرتب‌سازی سریع (Quick Sort) یکی از الگوریتم‌های مشهور مرتب‌سازی داده‌ها است. این الگوریتم طی مراحل بازگشتی زیر یک روش تقسیم و غلبه برای مرتب کردن داده‌ها ارائه می‌نماید:

1- انتخاب عنصر محوری: یکی از عناصر آرایه به عنوان عنصر محوری (pivot) - به عنوان مثال عنصر اول - انتخاب می‌شود.

2- تقسیم آرایه: چینش عناصر آرایه به قسمی تغییر داده می‌شود که تمامی عناصر کوچکتر یا مساوی محور در سمت چپ آن و تمامی عناصر بزرگتر در سمت راست آن قرار بگیرند. این دو قسمت زیر آرایه‌های چپ و راست نامیده می‌شوند.

3- مرتب‌سازی بازگشتی: زیرآرایه‌های چپ و راست به روش مرتب‌سازی سریع مرتب می‌شوند.

  

پیاده‌سازی تقسیم آرایه

  [برگرد بالا]

با استفاده از تابع زیر - با فرض انتخاب عنصر اول به عنوان محور - می‌توان مرحله تقسیم آرایه را پیاده‌سازی کرد:

  

int partition(int arr[], int low, int high){

  int left = low + 1, right = high, temp, pivot = arr[low];

  while(left <= right){

    while(arr[left] <= pivot && left <= right)

      left++;

    while(arr[right] > pivot && left <= right)

      right--;

    if(left < right){

      temp = arr[left];

      arr[left] = arr[right];

      arr[right] = temp;

    }

  }

  arr[low] = arr[right];

  arr[right] = pivot;

  return right;

}

  

def partition(arr, low, high):  

    left, right, pivot = low + 1, high, arr[low]

    while left <= right:

        while arr[left] <= pivot and left <= right:  

            left += 1

        while arr[right] > pivot and left <= right:  

            right -= 1  

        if left < right:

            arr[left], arr[right] = arr[right], arr[left]

    arr[low] = arr[right]

    arr[right] = pivot

    return right

  

تابع partition آرایه arr و اندیس بازه مورد نظر از آرایه جهت مرتب‌سازی را با low و high دریافت می‌کند. در متغیر pivot مقدار عنصر ابتدای بازه به عنوان عنصر محوری ذخیره می‌شود. همینطور در متغیر left اندیس عنصر دوم - اولین عنصر غیر محور بازه - و در متغیر right اندیس عنصر آخر ذخیره می‌شوند.

حلقه بیرونی تا زمانی که اندیس left کوچکتر یا مساوی اندیس right است تکرار خواهد شد. در این حلقه جابجایی‌های لازم برای قرار گرفتن عنصر محوری در محل صحیح خود صورت می‌گیرد. حلقه درونی اول مقدار اندیس left را تا جایی که مقدار آن کمتر یا مساوی right بوده و مقدار عنصر متناظر آن در آرایه کمتر یا مساوی محور باشد افزایش می‌دهد. به همین ترتیب حلقه بعدی مقدار اندیس right را تا جایی که مقدار آن بیشتر یا مساوی left بوده و مقدار عنصر متناظر آن در آرایه بیشتر از عنصر محوری باشد کاهش می‌دهد. در انتها اگر left کوچکتر از right باشد مقدار متناظر آنها در آرایه جابجا می‌شود. چرا که بر اساس عملکرد دو حلقه درونی، اندیس left محل اولین عنصر بزرگتر از محور از ابتدای بازه و اندیس right محل اولین عنصر کوچکتر از محور از انتهای بازه را مشخص می‌کند. اگر این شرط برقرار نباشد به معنی آن است که تمامی عناصر بزرگتر از محور در سمت راست و تمامی عناصر کوچکتر از محور در سمت چپ بازه جمع شده‌اند (چرا؟). در پایان مقدار محور با مقدار حد فاصل دو زیرآرایه جابجا شده و اندیس محل محور به عنوان محل تقسیم دو زیرآرایه از تابع بازگشت داده می‌شود.

این تابع را روی یک آرایه هفت عنصری از اعداد صحیح بررسی می‌کنیم:

  

3 0 6 1 7 2 5

  

تابع به صورت (partition(arr, 0, 6 فراخوانی می‌شود:

  

3 0 6 1 7 2 5:  pivot = 3, left = 1, right = 6

  

شرط left < right برقرار است. پس وارد حلقه شده و حلقه‌های درونی اجرا می‌شوند. پس از اجرای حلقه‌ها مقدار left و right به اندیس دو و پنج تغییر می‌کنند و مقادیر متناظر آنها جابجا می‌شوند:

  

3 0 2 1 7 6 5:  pivot = 3, left = 2, right = 5

  

شرط left < right همچنان برقرار است. حلقه‌های درونی مقدار left و right را به چهار و سه تغییر می‌دهند. اما چون left < right نیست جابجایی انجام نمی‌شود:

  

3 0 2 1 7 6 5:  pivot = 3, left = 4, right = 3

  

با نادرست بودن شرط left < right از حلقه بیرونی نیز خارج شده و به دستورات جابجایی نهایی می‌رسیم:

  

1 0 2 3 7 6 5

  

عنصر محوری جابجا شده است. در این حالت عدد سه به طور قطع در محل اصلی خود پس از مرتب‌سازی قرار دارد. چرا که تمامی عناصر زیرآرایه چپ از آن کوچکتر و تمامی عناصر زیرآرایه راست از آن بزرگتر هستند. این بازه‌ها هر تغییری در چینش داشته باشند، تاثیری در محل عدد سه نخواهند داشت.

  

پیاده‌سازی مرتب‌سازی سریع

  [برگرد بالا]

در مرحله بعدی از الگوریتم مرتب‌سازی سریع، دو زیرآرایه چپ و راست به صورت بازگشتی مرتب می‌شوند:

  

void quick_sort(int arr[], int low, int high){

  if(low < high){

    int pivot = partition(arr, low, high);

    quick_sort(arr, low, pivot - 1);

    quick_sort(arr, pivot + 1, high);

  }

}

  

def quick_sort(arr, low, high):

    if low >= high:

        return

    pivot = partition(arr, low, high)

    quick_sort(arr, low, pivot - 1)

    quick_sort(arr, pivot + 1, high)

  

تابع quick_sort آرایه و بازه مورد نظر برای مرتب‌سازی را دریافت کرده، پس از تقسیم آرایه و مشخص شدن محل عنصر محوری، دو زیرآرایه چپ و راست را با فراخوانی بازگشتی حل می‌کند. توجه داشته باشید که در این تابع pivot اندیس عنصر محوری را در خود ذخیره می‌کند. در تابع partition این متغیر مقدار عنصر محوری را ذخیره می‌کرد.

در مثال فوق وضعیت آرایه پس از اجرای دستور تقسیم آرایه در هر فراخوانی به صورت زیر خواهد بود:

  

مرتب‌سازی سریع

  

0)  3 0 6 1 7 2 5:  low = 0, high = 6

1)  quick_sort(arr, 0, 6 )    ->    1 0 2 3 7 6 5, pivot = 3

2)  quick_sort(arr, 0, 2 )    ->    0 1 2 3 7 6 5, pivot = 1

3)  quick_sort(arr, 0, 0 )    ->    0 1 2 3 7 6 5

4)  quick_sort(arr, 2, 2 )    ->    0 1 2 3 7 6 5

5)  quick_sort(arr, 4, 6 )    ->    0 1 2 3 5 6 7, pivot = 6

6)  quick_sort(arr, 4, 5 )    ->    0 1 2 3 5 6 7, pivot = 4

7)  quick_sort(arr, 5, 5 )    ->    0 1 2 3 5 6 7

  

در پایان آرایه مرتب شده است.

  

پیچیدگی زمانی مرتب‌سازی سریع

  [برگرد بالا]

در مرتب‌سازی‌های مبتنی بر مقایسه عموما تعداد مقایسه‌ها ملاک بررسی پیچیدگی زمانی است. $T(n)$ را تعداد مقایسه‌های لازم برای مرتب کردن آرایه‌ای به طول $n$ با روش مرتب‌سازی سریع در نظر می‌گیریم. تابع partition برای تقسیم‌بندی بازه‌ای به طول $n$ به غیر از عنصر محوری تمامی عناصر را مقایسه می‌کند و به $n - 1$ مقایسه نیاز دارد.

بهترین حالت قرار گرفتن عنصر محوری زمانی است که این عنصر در وسط بازه قرار بگیرد و آن بازه را به دو بازه با اندازه تقریبا برابر تقسیم کند. در این حالت هر زیربازه $ T(\frac{n}{2}) $ مقایسه نیاز خواهد داشت و می‌توان نوشت:

  

\[T(n) = 2 T(\frac{n}{2}) + n - 1 \]

  

با استفاده از قضیه اصلی یا حل رابطه بازگشتی مشخص می‌شود که $T(n)$ از مرتبه اجرای $ \theta (n log n)$ است.

در بدترین حالت عنصر محوری در یک سوی بازه قرار گرفته و تمامی عناصر دیگر در یک سمت آن جمع می‌شوند. این حالت زمانی اتفاق می‌افتد که بازه از قبل به صورت نزولی یا صعودی مرتب باشد. در نتیجه یک زیربازه از اندازه صفر و یک زیربازه از اندازه $n - 1$ تولید خواهد شد:

  

\[T(n) = T(0) + T(n - 1) + n - 1 = T(n - 1) + n - 1 \]

  

حل این رابطه بازگشتی نشان از مرتبه اجرایی $ \theta(n^2)$ در بدترین حالت اجرای الگوریتم دارد.

  

ویژگی‌های مرتب‌سازی سریع

  [برگرد بالا]

1- پیچیدگی زمانی اجرای الگوریتم در بهترین حالت $ \theta(n log n)$ و در بدترین حالت $ \theta (n^2)$ است. با استفاده محاسبات ریاضی می‌توان نشان داد در حالت متوسط نیز مرتبه اجرا $ \theta (n log n)$ است.

2- این الگوریتم یک مرتب‌سازی درجا است. یعنی میزان حافظه مصرفی الگوریتم مستقل از طول آرایه است.

3- زمانی که تعداد عناصر آرایه کم باشد، سرعت اجرای مرتب‌سازی درجی بهتر از مرتب‌سازی سریع است. به همین دلیل طی مراحل بازگشتی مرتب‌سازی سریع، اگر طول بازه عدد کوچکی باشد، معمولا بازه با مرتب‌سازی درجی مرتب می‌شود.

4- الگوریتم مرتب‌سازی سریع با پیاده‌سازی فوق یک روش ناپایدار است. چنین الگوریتمی لزوما ترتیب عناصر با مقدار یکسان را پس از مرتب‌سازی حفظ نمی‌کند.

5- انتخاب عنصر محوری بحث مفصلی دارد. اما در کل یک انتخاب آزاد است. می‌توان عنصر اول، عنصر آخر، یا هر عنصر دیگری را به عنوان عنصر محوری انتخاب کرد. حتی لازم نیست از ابتدا تا انتها از یک روش انتخاب استفاده کرد. یکی از روش‌های رایج، انتخاب یک عنصر تصادفی به عنوان عنصر محوری است. اگرچه انتخاب عنصر محوری مناسب باعث بالا رفتن کارایی الگوریتم می‌شود، اما عموما هزینه لازم برای یافتن چنین محوری بالا بوده و مقرون به صرفه نیست.


نسخه‌ی اولیه‌ی این نوشته از وب‌سایت برنامه‌نویسی و طراحی الگوریتم به الگوریتمستان منتقل شده است.

تا کنون ۸۶ امتیاز ثبت شده
نوشته لایک نداشت؟
 
به اشتراک گذاری نوشته

amasoudfam.ir/l/ii1hz

اشتراک‌گذاری در LinkedIn     اشتراک‌گذاری در Twitter     ارسال با Telegram

نام: *  
پست الکترونیک (محرمانه):
پیام: *  
• آرزو
۲۳ بهمن ۱۳۸۵، ساعت ۱۵:۲۴

سلام

             اول!  دی

• آرزو
۲۵ بهمن ۱۳۸۵، ساعت ۱۴:۵۷

نه خیر به شما یه نفر لینک نمی دیم..دیییی

• fatemeh
۲۵ بهمن ۱۳۸۵، ساعت ۱۸:۲۹

salam

matalebe basi zibayi darin

age bazam behemoon sar bezanan shayad (taze shayad) toonestam arezu ro razi konam ke behetun link bedim

.

.

.

rasti man zabane kamputeram be ham rikhte...vase hamin majbooram finglish benevisam

مسعود اقدسی‌فام
۲۶ بهمن ۱۳۸۵، ساعت ۱۲:۲۷

آرزو جان و فاطمه خانم

شما لینک هم ندید سرورید. همینکه قدم رنجه می کنید و تشریف می یارید خودش خیلیه!

موفق باشید

• محمدرضا
۲۸ بهمن ۱۳۸۵، ساعت ۱۴:۱۳

ای ز ذِ

مسعود اقدسی‌فام
۲۸ بهمن ۱۳۸۵، ساعت ۱۴:۳۸

محمد رضا جان این پیغام به چه زبانیه!؟

• آرزو و فاطمه
۲۸ بهمن ۱۳۸۵، ساعت ۱۸:۲۰

ای ز ذ غممخل تبلا   من زافغ   بیسیو 54  8554%$# @@@@@@@ دلون 1!!!!!×دالبابذتلات

sآ بلابل بلا #@#@@@@@@@@@@@@@@@@@@@@@@@تاه7698089

این ادامه ی حرف بالایی بود...دیییییییییییییییییی

خیلی حرف زیبایی زدند واقعا همین طوره یعنی لبایبلیبلیب خبذلا یب@@@@× و ما اگر این چیزها رو میدونستیم دیگه اونجا بود که بلالاعفازرافقغ875*=-9تناتلالب12@@@@@@@@@@2ذ  شما هم باید بدونی که خیلی لغعفغالبذلبلثقلب 5654   !!! اینم چه حرفی خو ب اگه میدونستی که لبابلالبارالبال@،؛,،^78 گرچه ما الان تو جامعه ای هستیم که خیلی این چیزا هست و باید با امپر یالیسم و سوسیالیم و بفغایلایبلایبلا زندگی کنیم...شرایط ایجاب می کنه....

• fatemeh
۲ اسفند ۱۳۸۵، ساعت ۲۱:۱۷

salam

shoma aval nazaretuno raje be un bahsi ke man o arezu bala matrah kardim bedin

bad age eftekhar dadin pishnahadetunam baraye weblog begin

• reza
۷ اسفند ۱۳۸۵، ساعت ۱۰:۰۶

salam

khoby

masod jan

az inka matalb weblagt hamysha baroza  mamnon  onydvaram dar tamamya marahl zandagy movafagh bashy

• reza
۷ اسفند ۱۳۸۵، ساعت ۱۰:۳۰

salam

• محمد وند جليلي
۷ اسفند ۱۳۸۵، ساعت ۱۳:۴۰

سلام  داش مسعود

سايتت خيلي پر محتوا و قشنگ هستش ... موفق باشي

• مهدی
۸ اسفند ۱۳۸۵، ساعت ۱۱:۴۲

لطفا اگه ميتونيد چند منبع فارسي و چند منبع انگليسي براي طراحي الگوريتم معرفي كنيد

مسعود اقدسی‌فام
۹ اسفند ۱۳۸۵، ساعت ۰۹:۵۴

فاطمه خانم! چشم.

مهسا خانم! ممنونم.

رضا جان! ممنون از لطفتون.

محمد عزیز! شما لطف داری.

مهدی جان! منابع لاتین معرفی شده قبلا. منبع فارسی هم سراغ ندارم.

• فاطمه
۱۰ اسفند ۱۳۸۵، ساعت ۰۰:۲۸

سلام

دوشنبه آزمون داریم

برنامه نویسی رو هم دبیرمون برامون کلاس بعد از ظهر گذاشت بهمون یاد داد

البته تاحالا دو جلسه رفتیم

چون برنامه نویسی یه ذره یاد گرفتم از این به بعد بیشتر از مطالبتون استفاده می کنم

هم برای تمرین هم یادگیری

• daneshjoo
۶ فروردین ۱۳۸۶، ساعت ۱۴:۳۲

سلام

مي خواستم راه حل هاي ديگر quick sort را به غير از روش تقسيم و حل برايم ايميل بزنيد .

ممنون ميشم اگه هر چه سريعتر برايم بفرستيد .

• فاطمه
۲۲ اردیبهشت ۱۳۸۶، ساعت ۱۴:۲۹

سلام

فکر می کنم اشتباه شده .

مسعود اقدسی‌فام
۲۲ اردیبهشت ۱۳۸۶، ساعت ۱۴:۵۱

فاطمه خانوم چه اشتباهی؟

• دلوين
۳۰ اردیبهشت ۱۳۸۶، ساعت ۱۹:۴۵

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

با تشكر

دلوين

• منا
۵ تیر ۱۳۸۶، ساعت ۱۲:۱۸

اينجا كسي كمك نميكنه ؟؟؟؟؟؟؟؟

خواهش ميكنم...........

• رامین
۲۱ آبان ۱۳۸۶، ساعت ۲۳:۰۲

سلام اقا مسعود گل تئوری الگوریتمت را متوجه شدم ولی متاسفانه متغییرهای که در خط دوم کد نویسی ایجاد کردی واسم نامفهوم lb or rb

• فريدون قاسمي
۲۹ آبان ۱۳۸۶، ساعت ۲۰:۱۸

همه مطالب را براي من بفرستيد  خيلي خوب است

• سعید
۴ آذر ۱۳۸۶، ساعت ۰۷:۴۴

مرتبه اجرایی در الگوریتم را کمی برایم با مثال توضیح دهید؟

• نگار
۱۵ آذر ۱۳۸۶، ساعت ۰۰:۵۸

سلام

خسته نباشيد -ممنون از زحمات شما

• زیبا
۲۵ خرداد ۱۳۸۷، ساعت ۲۱:۰۲

آقای اقدسی ممنون

مفید بود .

من 2 تیر امتحان طراحی الگوریتم دارم . خیلی می ترسم.

• baran
۱۱ دی ۱۳۸۷، ساعت ۱۹:۲۶

رابطه ای برای تعداد حالتهایی که می توان ضرب ماتریس ها را پرانتز بندی نمود در زبان c چیست؟

• baran
۱۱ دی ۱۳۸۷، ساعت ۱۹:۳۱

پیاده سازی روش همینتونی

مسعود اقدسی‌فام
۱۸ دی ۱۳۸۷، ساعت ۱۹:۰۳

باران خانم، تعداد حالتهای پرانتز بندی n ماتریس از رابطه

C( 2n - 2, n - 1 ) / n

به دست می یاد که منظور از C همان تابع ترکیبیات ریاضیه.

• baran
۲۰ دی ۱۳۸۷، ساعت ۱۷:۲۸

مرسی از راهنماییتون آقای اقدسی

• baran
۲۰ دی ۱۳۸۷، ساعت ۱۷:۳۴

سلام آقای اقدسی.لطفا  روش همینتونی را با زبان c  پیاده سازی کنید.ممنون می شم.

• taranom
۲۴ بهمن ۱۳۸۷، ساعت ۱۰:۵۳

سلام

میشه برای این برنامه که مرتب سازی سریع رو توضیح دادید، پیچیدگی زمانی را هم مطرح کنید؟ به هر حال من فکر میکنم یکی از مسایل مهم در زمینه ی طراحی الگوریتم همین پیچیدگی هاست!

ممنون از زحماتتون

مسعود اقدسی‌فام
۲۴ بهمن ۱۳۸۷، ساعت ۱۱:۰۷

سلام دوست عزیز

بله حق با شماست. در حال ویرایش و تکمیل کردن مطالب مختلف سایت هستم. این مطلب هم سر فرصت اصلاح خواهد شد.

ممنون از محبتتون.

• یاسی
۲۶ فروردین ۱۳۸۸، ساعت ۲۱:۵۲

SALAM LOTFAN ALGORITM ASLI MORATAB SAZYE SARI KE AZ HOARE HST RO VASAM EIMAIL KONIN . LOTFAN SARI LAZEM DARAM. MAMNON

• سهیلا
۲۵ مهر ۱۳۹۰، ساعت ۲۰:۱۰

یه کم واضحتربنویسسسسسسسسسسسسس0702

• مریم
۲۵ آبان ۱۳۹۰، ساعت ۲۰:۲۹

میشه مطلب در مورد بدست آوردن اوی بزرگ و تتا روی سایتتون بذلرید

• سید
۴ آذر ۱۳۹۰، ساعت ۱۴:۵۶

ممنون از سایت جالبتون

بهتر است نمونه های قابل اجرا ارائه دهید

۴ آذر ۱۳۹۰، ساعت ۱۶:۳۲
• مسعود اقدسی‌فام

منم از شما سپاسگزارم سید جان

منظورتون از نمونه‌های قابل اجرا چیه؟

• دانشجو
۲۶ آذر ۱۳۹۰، ساعت ۱۰:۴۳

باسلام وخسته نباشید..مطالبتون درست چیزای بوذ که من دنبالشون بودم...و بسیار ممنونم...ولی سوالی که مطرح میشه اینه که شما چجوری پیچیدگی زمانی اونارو حساب میکنید..من پیچیدگی زمانی مرتب سازی درجی رو حساب کردم..ولی نحوه ی محاسبهbig tetaرو نمیدونم.فقطbig oرو میدونم.

باتشکر

• نجمه
۳ دی ۱۳۹۰، ساعت ۱۴:۳۴

خیلی ممنون عالی بودتوضیحات

• محمد
۱۵ دی ۱۳۹۰، ساعت ۲۱:۵۶

خدا پدر و مادر اون آدمی رو بیامرزه که ویکیپدیا رو راه انداخت........ همه این مطالب اونجا هست........برو باباجون جمش کن14141414

۱۵ دی ۱۳۹۰، ساعت ۲۲:۵۸
• مسعود اقدسی‌فام

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

ولی اینطور نیست که متن اونا رو اینجا کپی کرده باشم. اینا همه آموخته‌های خودم به قلم خودم هستن. سعی کردم طوری بیان کنم که اکثر ترجمه‌های این منابع در بیانشون مشکل دارن. 01

• هیوا
۱ اردیبهشت ۱۳۹۱، ساعت ۰۲:۱۶

میشه لطفا این الگوریتم رو بصورت غیر بازگشتی پاده کنید و تغییراتش رو شرح بدید؟

۱ اردیبهشت ۱۳۹۱، ساعت ۱۰:۴۶
• مسعود اقدسی‌فام

اگر امکان و فرصتش باشه حتما در این مورد مطلبی می‌نویسم.

ممنون از توجهتون.

• ف_ک
۲۳ آبان ۱۳۹۱، ساعت ۰۹:۴۹

با تشکر از راهنمایی تون.

اگه میشه بگید چرا اسم این الگوریتم را مرتب سازی سریع نامیده اند.

مرسی.

۲۵ آبان ۱۳۹۱، ساعت ۱۴:۰۸
• مسعود اقدسی‌فام

اصولا هر روش الگوریتمی بر اساس نوع عملکرد خودش یا منبعی که از اون الهام گرفته شده نامگذاری می‌شه. مثلا مرتب‌سازی ادغامی به خاطر بحث ادغام، الگوریتم ژنتیک به خاطر الگوبرداری از بحث تکامل ژنتیکی، جستجوی دودویی به خاطر تقسیم شدن بازه به دو قسمت در هر مرحله ...

احتمال زیاد

• مجتبی
۳۰ آبان ۱۳۹۱، ساعت ۰۸:۴۷

با سلام. چگونه میتوان از الگوریتم سریع برای حل سوالات زیر استفاده کرد 1-

یافتن میانه2- یافتن عنصر kام عنصر مینیمم

• محسن
۱۲ دی ۱۳۹۱، ساعت ۲۱:۰۸

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

• D_felfelak
۱۵ تیر ۱۳۹۲، ساعت ۱۳:۱۰

کد رو عينا" در ويژوال زدم فکر ميکنم که الگوريتم پارتيشن مشکل داره چون مثلا" اگر به تابع آرايه زير رو بديم :

45 37 3 102 68 12 10 38 37 100

جواب زير رو ميده:

102 100 68 38 45 37 37 12 3 10

که اشتباه هست!!

۱۵ تیر ۱۳۹۲، ساعت ۱۹:۳۰
• مسعود اقدسی‌فام

با تشکر از تذکرتون. اصلاح شد.

• Mani Amoozadeh
۱۴ دی ۱۳۹۲، ساعت ۱۰:۳۹

به طور تصادفی به این سایت برخوردم. خوب و روون می نویسی و مهم تر اینکه مفاهیم رو درست منتقل می کنی.

keep up the good works :)0

• الی
۱۸ دی ۱۳۹۲، ساعت ۱۲:۱۹

سلام .خسته نباشید .ببخشید من یه پروزه دارم به هرکی گفتم نتونسته واسم انجامش بده اگه شما میتونید خبرم کنید .با استفاده از الگوریتم زنتیک برای پیاده سازی الگوریتم جست و جوی دودویی .با تشکر

• علیرضا
۱ اسفند ۱۳۹۲، ساعت ۲۳:۲۳

کارم راه افتاد

دست شما درد نکنه!!!!!!!!!!!!!!!!!!!!!!!!!!!04

• nika
۱۸ فروردین ۱۳۹۳، ساعت ۱۰:۳۶

سلام. من برنامه ای می خوام با استفاده از الگوریتم تقسیم و غلبه  مرتب سازی سریع ،برای بدست اوردن عضو ی که بیش از نیمی از ارایه رو گرفته است.

اگه میشه خیلی زود جواب بدین ممنون میشم.07

• محمد عاشری
۱۰ دی ۱۳۹۳، ساعت ۰۴:۲۷

با سلام و خسته نباشید

امید وارم پیروز و سر بلند باشید01

• احمد
۱۲ خرداد ۱۳۹۴، ساعت ۰۱:۵۶

سلام و عرض ادب و خسته نباشید

یه سوال دارم این سوال در رابطه با یک استاد از دوست بنده سوال پرسیده شده که باید جواب رو ایمیل کنه آیا شما از این سوال سر در میارید راهنمایی کنید

اگه کاری از دست بنده بر بیاد انجام میدم حنی میتونم سایتتون رو در چند سایت گرافیک که دارم تبلیغ کنم البته در قبال کمکی که میکنید:

سوال1

برای جستجوی یک عنصر مثلا یک 50 یک عدد مرتب کنیم از نزولی به سعودی سوال 2

الگوریتم مرتب سازی در دو تمرین اجرا کنید فایل را ایمیل کنید همراه با عکس

• komeil70
۴ تیر ۱۳۹۵، ساعت ۱۱:۲۰

نسبت به الگوریتم های دیگری که تو سایت عالی بودن این افتضاح بود نسبت به اونا....09

• محمد
۲۸ مهر ۱۳۹۵، ساعت ۲۱:۲۰

111009090909

• محمد
۲۸ مهر ۱۳۹۵، ساعت ۲۱:۲۱

خوبه لایک

• امیر
۱۱ بهمن ۱۳۹۸، ساعت ۱۹:۴۰

سلام چرا برای من رو پایتون ارور میده0707

• رز
۲۰ اردیبهشت ۱۳۹۹، ساعت ۲۲:۳۷

خیلی خوب توضیح داده شده بود، ممنون من استفاده کردم.

• میکاییل
۲۰ آبان ۱۳۹۹، ساعت ۰۸:۴۹

سلام

یکم بهتر بنویسید

توضیح بیشتر بدید مخصوصا در مورد قطعه کد ها