Golden man
03-12-2008, 10:27 AM
الفرز بالدمج Merge Sort
هذا مثال وجدته لدي عن خوارزمية الفرز بالدمج :
397
398
399
400
و بالنسبة لتابع الفرز بالدمج :
void Merge(int *arr,int low,int high)
{
int *temp = new int[size];
int mid = (low+high)/2;
int i=low ,j=mid+1, k=low;
while(i<=mid && j<=high)
{
if(arr[i] < arr[j])
temp[k++] = arr[i++];
else if(arr[j] < arr[i])
temp[k++] = arr[j++];
else
{
temp[k++] = arr[i++];
temp[k++] = arr[j++];
}
}
while(i<=mid)
temp[k++] = arr[i++];
while(j<=high)
temp[k++] = arr[j++];
for(i=low; i<=high; i++)
arr[i] = temp[i];
delete temp;
}
void MergeSort(int *arr,int low,int high)
{
if(low < high)
{
int mid = (low+high)/2;
MergeSort(arr,low,mid);
MergeSort(arr,mid+1,high);
Merge(arr,low,high);
}
}
و هنا يوجد برنامج اختبار الفرز بالدمج كما طلبه الأستاذ :
http://www.100hla.com/up/uploads/5dcdb76d5d.rar
هذا مثال وجدته لدي عن خوارزمية الفرز بالدمج :
397
398
399
400
و بالنسبة لتابع الفرز بالدمج :
void Merge(int *arr,int low,int high)
{
int *temp = new int[size];
int mid = (low+high)/2;
int i=low ,j=mid+1, k=low;
while(i<=mid && j<=high)
{
if(arr[i] < arr[j])
temp[k++] = arr[i++];
else if(arr[j] < arr[i])
temp[k++] = arr[j++];
else
{
temp[k++] = arr[i++];
temp[k++] = arr[j++];
}
}
while(i<=mid)
temp[k++] = arr[i++];
while(j<=high)
temp[k++] = arr[j++];
for(i=low; i<=high; i++)
arr[i] = temp[i];
delete temp;
}
void MergeSort(int *arr,int low,int high)
{
if(low < high)
{
int mid = (low+high)/2;
MergeSort(arr,low,mid);
MergeSort(arr,mid+1,high);
Merge(arr,low,high);
}
}
و هنا يوجد برنامج اختبار الفرز بالدمج كما طلبه الأستاذ :
http://www.100hla.com/up/uploads/5dcdb76d5d.rar