PDA

View Full Version : درخواست کمک در تبدیل شبه کد مرتب سازی ادغامی به معادل سی شارپ آن



zahra-joon
شنبه 19 اردیبهشت 1394, 11:43 صبح
سلام دوستان
میشه تو رفع کردن مشکل این برنامه مرتب سازی ادغامی (Merge Sort) بهم کمک کنین؟
فایل ضمیمه windows form application هست و با ویژوال 2010

void MergeSort(int n, int[] a)
{
int h = n / 2;
int m = n - h;
int[] u = new int[h];
int[] v = new int[m];
if (n > 1)
{
copy a[0] through a[h-1] to u[0] through u[h-1]
copy a[h] through a[n-1] to v[0] through v[m-1]
MergeSort(h,u);
MergeSort(m,v);
Merge(h,m,u,v,a);
}
}

void Merge(int h, int m, int[] u, int[] v, int a)
{
int i, j, k;
i = j = k = 0;
while (i < h && j < m)
{
if (u[i] < v[j])
{
a[k] = u[i];
i++;
}
else
{
a[k] = v[j];
j++;
}
k++;
}
if(i>h)
copy v[j] through v[m-1] to a[k] through a[h+m-1]
else
copy u[i] through u[h-1] to a[k] through a[h+m-1]
}

RmeXXXXXXXXX
شنبه 19 اردیبهشت 1394, 16:47 عصر
بفرمایید:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MergeSort_00
{
public class MergeSortClass
{

private void merge(int h, int m, int[] U, int[] V, int[] S)
{
int i, j, k;
i = j = k = 0;

while (i < h && j < m)
{
if (U[i] < V[j])
{
S[k] = U[i];
i++;
}
else
{
S[k] = V[j];
j++;
}
k++;
}// (i,j)

if (i >= h)
{
while (j < m)
{
S[k] = V[j];
j++;
k++;
}
}
else
{
while (i < h)
{
S[k] = U[i];
k++;
i++;
}
}
}

public void MergeSort(int[] yourArray)
{
int h = yourArray.Length / 2;
int m = yourArray.Length - h;

if (yourArray.Length > 1)
{
int[] U = new int[h];
int[] V = new int[m];

for (int i = 0; i < h; i++)
U[i] = yourArray[i];
for (int k = 0; k < m; k++)
V[k] = yourArray[h + k];

this.MergeSort(U);
this.MergeSort(V);
this.merge(h, m, U, V, yourArray);
}
}
}
}

RmeXXXXXXXXX
شنبه 19 اردیبهشت 1394, 16:48 عصر
من این کد رو چند سال پیش ک دانشجو بودم تبدیل کردم! یادمه خیلی اذیتم کرد:قهقهه: