امتیاز موضوع:
  • 0 رأی - میانگین امتیازات: 0
  • 1
  • 2
  • 3
  • 4
  • 5
درخواست توضیح در مورد الگوریتم ادغامی
نویسنده پیام
mobilemasoud آفلاین
تازه وارد

ارسال‌ها: 4
موضوع‌ها: 4
تاریخ عضویت: اسفند ۱۳۸۷

تشکرها : 2
( 0 تشکر در 0 ارسال )
ارسال: #1
Question  درخواست توضیح در مورد الگوریتم ادغامی
با سلام اگر کسی توضیحاتی در مورد الگوریتم مرتب سازی ادغامی داره برام بزاره با احترام اگر کدهاشو رو هم دارید ممنون می شم
۲۱-فروردین-۱۳۸۸, ۱۱:۲۵:۰۰
ارسال‌ها
پاسخ
ajlajlajl آفلاین
مدیر بازنشسته
*****

ارسال‌ها: 2,192
موضوع‌ها: 70
تاریخ عضویت: مهر ۱۳۸۴

تشکرها : 932
( 2618 تشکر در 1020 ارسال )
ارسال: #2
RE: درخواست توضیح در مورد الگوریتم ادغامی
اگه برای مرتب کردن میخواید میگن quicksort بهتره.


توی مرتب سازی ادغامی میایم اول لیستو دو نصفش میکنیم. بعد هر دو تا نصفه رو دوباره میدیم به خودش ( بازگشتیه ) و در نهایت پیش میریم تا به تک عضوی برسیم. بعد میایم این نصفه ها رو دوباره میدیم به یه تابع دیگه که دو تا نصفه به صورت مرتب به هم میچسبونه و یه لیست مرتب شده در نهایت بیرون میاد. شبه کدشو دارم:
این تابع اصلی :
کد:
void mergesort (int n, keytype s[])
{
   const int h = [n/2] , m = n - h;
   keytype U[1..h], v[1..m];
   if (n > 1){
     copy S[1] through S[h] to U[1] through U[h];
     copy S[h + 1] through S[n] to V[1] through U[m];
     mergesort(h, U);
     mergesort(m, V);
     merge(h, m, U, V, S);
   }
}
اینم چسبونکش:
کد:
void merge (int h, int m, const keytype U[], Const keytype V[], keytype S[])
{
   index i,j,k;
   i = 1; j = 1 k = 1;
   while (i <= h && j <= m) {
     if (U[i] < V[j]) {
       S[k] = U[i];
       i++;
     }
     else {
       S[k] = V[j];
       j++;
     }
     k++;
   }
   if (i > h)
     copy V[j] through V[m] to S[k] through S[h + m];
   else
     copy U[i] through U[h] to S[k] through S[h + m];
}

البته این درجا نیست و حافظه زیاد میسوزونه. در نتیجه بهتره برای لیستای بزرگ و کوچیک از مدل 2 استفاده کنید:
کد:
void mergesort2 (index low, index high)
{
   index mid;
   if (low < high) {
     mid = [(low + high)/2];
     mergesort2(low, mid);
     mergesort2(mid + 1, high);
     merge2(low, mid, high);
   }
}
اینم چسبونکش:
کد:
void merge2(index low, index mid, index high)
{
   index i, j, k;
   keytype U[low..high];
   i = low; j = mid+1; k = low;
   while (i <= mid && j <= high) {
     if (S[i] < S[j]) {
       U[k] = S[i];
       i++;
     }
     else {
       U[k] = S[j];
       j++;
     }
     k++;
   }
   if (i > mid)
     move S[j] through S[high] to U[k] through U[high];
   else
     move S[i] through S[mid] to U[k] through U[high]
   move U[low] through S[mid] to U[k] through U[high];
}

میزان رای دشمن است!
[تصویر:  cff100.png]
۲۱-فروردین-۱۳۸۸, ۲۰:۰۲:۵۲
وب سایت ارسال‌ها
پاسخ
تشکر شده توسط : Loyal, mobilemasoud, mahbooob, رهگذر تنها


موضوعات مرتبط با این موضوع...
موضوع نویسنده پاسخ بازدید آخرین ارسال
  آموزش پردازش تصویر و بررسی الگوریتم های آن salehjg 34 41,214 ۲۸-بهمن-۱۳۹۶, ۱۸:۴۶:۴۶
آخرین ارسال: midel1
  الگوریتم minmax بازی نقطه و خط england 0 2,440 ۱۷-دى-۱۳۹۳, ۱۳:۵۲:۴۹
آخرین ارسال: england
  الگوریتم های زمان بندی در سیستم عامل ها pari_kh 7 27,187 ۲۰-آذر-۱۳۹۳, ۱۶:۰۴:۵۵
آخرین ارسال: نوشين سلماني
  الگوریتم مورچگان مژده صباغ نژاد 11 15,260 ۲۰-آبان-۱۳۹۳, ۲۱:۳۹:۱۲
آخرین ارسال: javad917
  [فوری] الگوریتم sedi67 0 2,182 ۲۰-آبان-۱۳۹۳, ۰۰:۰۳:۱۵
آخرین ارسال: sedi67
  طراحی الگوریتم ها به صورت بازگشتی The.Ghost 2 7,274 ۲۷-آبان-۱۳۹۱, ۲۰:۵۱:۱۵
آخرین ارسال: lord_viper
Sad الگوریتم zahra.sh 12 12,292 ۲۷-آبان-۱۳۹۱, ۱۳:۲۲:۱۳
آخرین ارسال: akramn
  الگوریتم جمع آوری سایت های نیازمندی aleas 0 2,623 ۲۷-آبان-۱۳۹۱, ۱۲:۴۱:۱۹
آخرین ارسال: aleas
  درخواست الگوریتم akbar_online 0 2,991 ۱۷-خرداد-۱۳۹۱, ۱۹:۳۱:۵۱
آخرین ارسال: akbar_online
  درخواست الگوریتم akbar_online 3 4,935 ۳۱-اردیبهشت-۱۳۹۱, ۱۳:۲۲:۲۲
آخرین ارسال: akbar_online

پرش به انجمن:


کاربرانِ درحال بازدید از این موضوع: 1 مهمان

صفحه‌ی تماس | IranVig | بازگشت به بالا | | بایگانی | پیوند سایتی RSS