PDA

View Full Version : سوال: مشکل این برنامه درباره مرتب سازی ادغامی چیه؟



veniz2008
چهارشنبه 18 اسفند 1389, 13:19 عصر
سلام دوستان،مشکل این برنامه که درباره مرتب سازی ادغامی هستش چیه؟وقتی دکمه مرتب سازی رو میزنم اصلا مرتب نمیکنه و بیشتر از تعداد اعضای آرایه،خروجی نامرتب چاپ میکنه. من برنامه رو میذارم،دوستان لطف کنند مشکل برنامه رو بگن،برنامه با vs 2005 نوشته شده،تشکر.
67275

veniz2008
چهارشنبه 18 اسفند 1389, 16:40 عصر
یه بزرگوار پیدا نشد که گره از مشکل ما وا کنه؟؟؟:متفکر:

ali.rezaei7
چهارشنبه 18 اسفند 1389, 17:23 عصر
سلام. آدرس رو به رو اين الگوريتم رو به همراه توضيح به زبان #C بيان كرده: الگوريتم ادغامي (http://fa.wikipedia.org/wiki/%D8%A7%D9%84%DA%AF%D9%88%D8%B1%DB%8C%D8%AA%D9%85_% D9%85%D8%B1%D8%AA%D8%A8%E2%80%8C%D8%B3%D8%A7%D8%B2 %DB%8C#.D9.85.D8.B1.D8.AA.D8.A8_.D8.B3.D8.A7.D8.B2 .DB.8C_.D8.A7.D8.AF.D8.BA.D8.A7.D9.85.DB.8C)

veniz2008
چهارشنبه 18 اسفند 1389, 22:12 عصر
دوست عزیز،صفحه ای که لینک دادی با یه روش متفاوت کار کرده،ضمن اینکه من میخوام مشکل کار خودم رو متوجه بشم،از دوستان تقاضا دارم که مشکل رو بهم بگن،تشکر.

exlord
چهارشنبه 18 اسفند 1389, 23:11 عصر
public int[] mergesort(int n, int[] s)
{
if (n <= 1)
return s; // age tole araye 1 ya 0 bashe az haminja return kon

int p = n / 2;
int m = n - p;
int[] A = new int[p];
int[] B = new int[m];

for (int i = 0; i < p; i++)
A[i] = s[i];
for (int i = 0, j = p; j < n; j++, i++)
B[i] = s[j];
A = mergesort(p, A); // <--- kheyli mohem
B = mergesort(m, B); // <--- kheyli mohem
return merge(p, m, A, B, s); // <-- kheyli mohem
}
public int[] merge(int p, int m, int[] A, int[] B, int[] s)
{
int i, j, k;
i = j = k = 0;
while (i < p || j < m) // && --> ||
{
if (i < p && j < m) //in khat ezafe shode
{
if (A[i] <= B[j])
{
s[k] = A[i];
i++;
}
else
{
s[k] = B[j];
j++;
}
}
else if (i < p)
{
s[k] = A[i];
i++;
}
else if (j < m)
{
s[k] = B[j];
j++;
}
k++;
}

return s; // <-- kheyli mohem
}

soroushp
یک شنبه 15 آبان 1390, 18:10 عصر
مشکل این برنامه چیه؟(مرتب سازی ادغامی)
public void mergesort2(int []a,int low,int high)
{
int mid;
mid = (low + high) / 2;
mergesort2(a, low, high);
mergesort2(a, mid + 1, high);
merge(a, low, mid, high);
}
public void merge(int[] a, int low, int mid, int high)
{
int i, j, b, c;
j = low;
for (i = mid + 1; i <= high; j += 1)
{
if (j != i)
{
c = a[i];
for (b = i; b > j; b-=1)
a[b] = a[b - 1];
a[j] = c;
}
else
{
break;
}
}
}