مقدمة لخوارزمية دمج الفرز

مقدمة لخوارزمية دمج الفرز

دمج الفرز هو خوارزمية فرز تعتمد على تقنية 'فرق تسد'. إنها واحدة من أكثر خوارزميات الفرز كفاءة.





كيفية توصيل airpods بـ android

في هذه المقالة ، ستتعرف على كيفية عمل خوارزمية فرز الدمج ، وخوارزمية نوع الدمج ، وتعقيد الوقت والمكان ، وتنفيذها في لغات برمجة مختلفة مثل C ++ و Python و JavaScript.





كيف تعمل خوارزمية دمج الفرز؟

يعمل نظام دمج الفرز على مبدأ فرق تسد. يعمل فرز الفرز بشكل متكرر على تقسيم المصفوفة إلى مصفوفتين فرعيتين متساويتين حتى تتكون كل مصفوفة فرعية من عنصر واحد. أخيرًا ، يتم دمج كل تلك المصفوفات الفرعية بحيث يتم فرز المصفوفة الناتجة.





يمكن شرح هذا المفهوم بشكل أكثر كفاءة بمساعدة مثال. ضع في اعتبارك مصفوفة لم يتم فرزها تحتوي على العناصر التالية: {16 ، 12 ، 15 ، 13 ، 19 ، 17 ، 11 ، 18}.

هنا ، تقوم خوارزمية فرز الدمج بتقسيم المصفوفة إلى نصفين ، وتدعو نفسها إلى النصفين ، ثم تدمج النصفين اللذين تم فرزهما.



دمج الفرز الخوارزمية

فيما يلي خوارزمية فرز الدمج:

MergeSort(arr[], leftIndex, rightIndex)
if leftIndex >= rightIndex
return
else
Find the middle index that divides the array into two halves:
middleIndex = leftIndex + (rightIndex-leftIndex)/2
Call mergeSort() for the first half:
Call mergeSort(arr, leftIndex, middleIndex)
Call mergeSort() for the second half:
Call mergeSort(arr, middleIndex+1, rightIndex)
Merge the two halves sorted in step 2 and 3:
Call merge(arr, leftIndex, middleIndex, rightIndex)

الموضوعات ذات الصلة: ما هي العودية وكيف تستخدمها؟





تعقيد الوقت والمكان لخوارزمية فرز الدمج

يمكن التعبير عن خوارزمية فرز الدمج في شكل علاقة التكرار التالية:

T (ن) = 2T (ن / 2) + O (ن)





بعد حل علاقة التكرار هذه باستخدام نظرية الماجستير أو طريقة شجرة التكرار ، ستحصل على الحل كـ O (n logn). وبالتالي ، فإن التعقيد الزمني لخوارزمية فرز الدمج هو O (n تسجيل الدخول) .

أفضل تعقيد زمني لفرز الدمج: O (n تسجيل الدخول)

تعقيد وقت الحالة المتوسطة لفرز الدمج: O (n تسجيل الدخول)

التعقيد الزمني الأسوأ لنوع الدمج: O (n تسجيل الدخول)

متعلق ب: ما هو تدوين Big-O؟

تعقيد الفضاء المساعد من خوارزمية فرز الدمج هي تشغيل) كما ن مطلوب مساحة إضافية في تنفيذ فرز الدمج.

C ++ تنفيذ خوارزمية دمج الفرز

فيما يلي تطبيق C ++ لخوارزمية فرز الدمج:

// C++ implementation of the
// merge sort algorithm
#include
using namespace std;
// This function merges two subarrays of arr[]
// Left subarray: arr[leftIndex..middleIndex]
// Right subarray: arr[middleIndex+1..rightIndex]
void merge(int arr[], int leftIndex, int middleIndex, int rightIndex)
{
int leftSubarraySize = middleIndex - leftIndex + 1;
int rightSubarraySize = rightIndex - middleIndex;
// Create temporary arrays
int L[leftSubarraySize], R[rightSubarraySize];
// Copying data to temporary arrays L[] and R[]
for (int i = 0; i L[i] = arr[leftIndex + i];
for (int j = 0; j R[j] = arr[middleIndex + 1 + j];
// Merge the temporary arrays back into arr[leftIndex..rightIndex]
// Initial index of Left subarray
int i = 0;
// Initial index of Right subarray
int j = 0;
// Initial index of merged subarray
int k = leftIndex;
while (i {
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
// If there're some remaining elements in L[]
// Copy to arr[]
while (i {
arr[k] = L[i];
i++;
k++;
}
// If there're some remaining elements in R[]
// Copy to arr[]
while (j {
arr[k] = R[j];
j++;
k++;
}
}
void mergeSort(int arr[], int leftIndex, int rightIndex)
{
if(leftIndex >= rightIndex)
{
return;
}
int middleIndex = leftIndex + (rightIndex - leftIndex)/2;
mergeSort(arr, leftIndex, middleIndex);
mergeSort(arr, middleIndex+1, rightIndex);
merge(arr, leftIndex, middleIndex, rightIndex);
}

// Function to print the elements
// of the array
void printArray(int arr[], int size)
{
for (int i = 0; i {
cout << arr[i] << ' ';
}
cout << endl;
}
// Driver code
int main()
{
int arr[] = { 16, 12, 15, 13, 19, 17, 11, 18 };
int size = sizeof(arr) / sizeof(arr[0]);
cout << 'Unsorted array:' << endl;
printArray(arr, size);
mergeSort(arr, 0, size - 1);
cout << 'Sorted array:' << endl;
printArray(arr, size);
return 0;
}

انتاج:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

تنفيذ JavaScript لخوارزمية دمج الفرز

فيما يلي تطبيق JavaScript لخوارزمية فرز الدمج:

// JavaScript implementation of the
// merge sort algorithm
// This function merges two subarrays of arr[]
// Left subarray: arr[leftIndex..middleIndex]
// Right subarray: arr[middleIndex+1..rightIndex]
function merge(arr, leftIndex, middleIndex, rightIndex) {
let leftSubarraySize = middleIndex - leftIndex + 1;
let rightSubarraySize = rightIndex - middleIndex;
// Create temporary arrays
var L = new Array(leftSubarraySize);
var R = new Array(rightSubarraySize);
// Copying data to temporary arrays L[] and R[]
for(let i = 0; i L[i] = arr[leftIndex + i];
}
for (let j = 0; j R[j] = arr[middleIndex + 1 + j];
}
// Merge the temporary arrays back into arr[leftIndex..rightIndex]
// Initial index of Left subarray
var i = 0;
// Initial index of Right subarray
var j = 0;
// Initial index of merged subarray
var k = leftIndex;
while (i {
if (L[i] <= R[j])
{
arr[k] = L[i];
i++;
}
else
{
arr[k] = R[j];
j++;
}
k++;
}
// If there're some remaining elements in L[]
// Copy to arr[]
while (i {
arr[k] = L[i];
i++;
k++;
}
// If there're some remaining elements in R[]
// Copy to arr[]
while (j {
arr[k] = R[j];
j++;
k++;
}
}
function mergeSort(arr, leftIndex, rightIndex) {
if(leftIndex >= rightIndex) {
return
}
var middleIndex = leftIndex + parseInt((rightIndex - leftIndex)/2);
mergeSort(arr, leftIndex, middleIndex);
mergeSort(arr, middleIndex+1, rightIndex);
merge(arr, leftIndex, middleIndex, rightIndex);
}
// Function to print the elements
// of the array
function printArray(arr, size) {
for(let i = 0; i document.write(arr[i] + ' ');
}
document.write('
');
}
// Driver code:
var arr = [ 16, 12, 15, 13, 19, 17, 11, 18 ];
var size = arr.length;
document.write('Unsorted array:
');
printArray(arr, size);
mergeSort(arr, 0, size - 1);
document.write('Sorted array:
');
printArray(arr, size);

انتاج:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

الموضوعات ذات الصلة: البرمجة الديناميكية: الأمثلة والمشكلات الشائعة والحلول

تنفيذ Python لخوارزمية فرز الدمج

فيما يلي تطبيق Python لخوارزمية فرز الدمج:

# Python implementation of the
# merge sort algorithm
def mergeSort(arr):
if len(arr) > 1:
# Finding the middle index of the array
middleIndex = len(arr)//2
# Left half of the array
L = arr[:middleIndex]
# Right half of the array
R = arr[middleIndex:]
# Sorting the first half of the array
mergeSort(L)
# Sorting the second half of the array
mergeSort(R)
# Initial index of Left subarray
i = 0
# Initial index of Right subarray
j = 0
# Initial index of merged subarray
k = 0
# Copy data to temp arrays L[] and R[]
while i if L[i] arr[k] = L[i]
i = i + 1
else:
arr[k] = R[j]
j = j + 1
k = k + 1
# Checking if there're some remaining elements
while i arr[k] = L[i]
i = i + 1
k = k + 1
while j arr[k] = R[j]
j = j + 1
k = k + 1
# Function to print the elements
# of the array
def printArray(arr, size):
for i in range(size):
print(arr[i], end=' ')
print()

# Driver code
arr = [ 16, 12, 15, 13, 19, 17, 11, 18 ]
size = len(arr)
print('Unsorted array:')
printArray(arr, size)
mergeSort(arr)
print('Sorted array:')
printArray(arr, size)

انتاج:

Unsorted array:
16 12 15 13 19 17 11 18
Sorted array:
11 12 13 15 16 17 18 19

فهم خوارزميات الفرز الأخرى

الفرز هو أحد الخوارزميات الأكثر استخدامًا في البرمجة. يمكنك فرز العناصر في لغات البرمجة المختلفة باستخدام خوارزميات الفرز المختلفة مثل الفرز السريع ، وفرز الفقاعات ، ودمج الفرز ، وفرز الإدراج ، وما إلى ذلك.

فرز الفقاعات هو الخيار الأفضل إذا كنت تريد التعرف على أبسط خوارزمية الفرز.

يشارك يشارك سقسقة بريد الالكتروني مقدمة في خوارزمية فرز الفقاعات

خوارزمية فرز الفقاعات: مقدمة ممتازة لفرز المصفوفات.

اقرأ التالي
مواضيع ذات صلة
  • برمجة
  • جافا سكريبت
  • بايثون
  • دروس الترميز
نبذة عن الكاتب يوفراج شاندرا(تم نشر 60 مقالاً)

يوفراج طالب جامعي في علوم الكمبيوتر بجامعة دلهي بالهند. إنه متحمس لتطوير الويب Full Stack. عندما لا يكتب ، فإنه يستكشف عمق التقنيات المختلفة.

المزيد من Yuvraj Chandra

اشترك في نشرتنا الإخبارية

انضم إلى النشرة الإخبارية لدينا للحصول على نصائح تقنية ومراجعات وكتب إلكترونية مجانية وصفقات حصرية!

انقر هنا للاشتراك