اذهب إلى المحتوى
  • 0

خوارزميات الترتيب ++C

نيلاي

السؤال

we want to write an algorithm that print a series of number for a value given by a user. The series must be displayed in ascending order and in descending order according the user's choice. The algorithm must be written using recursive function.

 

اتمنى المساعده في الحل او الشرح وشكرا مقدما الله يفتحها بوجه كل شخص حاول يساعدني فيه ويوفقه ويسعده دنيا واخره 😩

رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0
بتاريخ الآن قال Nadia الجهني:

ال c++ اخي الكريم 

ستجدين الشرح الكامل للخوارزمية في هذه الصفحة: الترتيب بالإدراج.

تشرح الصفحة طريقة عمل الخوارزمية مع شرح إنشائها بالطريقة التكرارية والتعاودية مع الأكواد.

حسب السؤال المشار من طرفك، ستحتاجين الطريقة التعاودية.

حل الخوارزمية كالتالي:

#include <iostream> 
using namespace std; 

void insertionSortRecursiveAscending (int arr[], int n) 
{ 
	// الحالة الأساس
	if (n <= 1) 
		return; 

	// n-1 ترتيب أول العناصر التي تحمل القيمة 
	insertionSortRecursiveAscending( arr, n-1 ); 

	// إدراج العنصر الأخير في مكانه الصحيح ضمن المصفوفة المرتبة
	int last = arr[n-1]; 
	int j = n-2; 

    /* تحريك العناصر في المصفوفة
    arr[0..i-1]
    والتي تكون أكبر من المفتاح المعطى
    بمقدار موقع واحد عن موقعها الحالي
    */
	while (j >= 0 && arr[j] > last) 
	{ 
		arr[j+1] = arr[j]; 
		j--; 
	} 
	arr[j+1] = last; 
} 

void insertionSortRecursiveDescending(int arr[], int n) 
{ 
	// الحالة الأساس
	if (n <= 1) 
		return; 

	// n-1 ترتيب أول العناصر التي تحمل القيمة 
	insertionSortRecursiveDescending( arr, n-1 ); 

	// إدراج العنصر الأخير في مكانه الصحيح ضمن المصفوفة المرتبة
	int last = arr[n-1]; 
	int j = n-2; 

    /* تحريك العناصر في المصفوفة
    arr[0..i-1]
    والتي تكون أصغر من المفتاح المعطى
    بمقدار موقع واحد عن موقعها الحالي
    */
	while (j >= 0 && arr[j] < last) 
	{ 
		arr[j+1] = arr[j]; 
		j--; 
	} 
	arr[j+1] = last; 
} 

// دالة مساعدة لطباعة محتويات المصفوفة
void printArray(int arr[], int n) 
{ 
	for (int i=0; i < n; i++) 
		cout << arr[i] <<" ";
	cout << endl;
} 

/* اختبار الدوال السابقة */
int main() 
{ 
	int i;
  	int arr[10]; 
  	
  	cout << "enter 10 numbers: " << endl; // نطلب من المستخدم إدخال 10 أرقام
  
  	for (i = 0; i < 10; i++) {
    	cin >> arr[z]; // نقرأ الأرقام من المستخدم
    }
  
	int n = sizeof(arr)/sizeof(arr[0]); 

	insertionSortRecursiveAscending(arr, n); 
	printArray(arr, n); // نطبع قيم المصفوفة التصاعدية
	
	insertionSortRecursiveDescending(arr, n);
	printArray(arr, n); // نطبع قيم المصفوصة التنازيلة

	return 0; 
}
رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

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

البرنامج بلغة سي بلس بلس :

#include <iostream>
using namespace std;

// دالة لتبديل قيم متغيرين في الذاكرة من نوع عددي
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

// دالة مساعدة لطباعة عناصر مصفوفة عددية
void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

// دالة الترتيب التصاعدي
void ascQuickSort(int arr[], int l, int r)
{

    if (l >= r)
    {
        return;
    }

    int pivot = arr[r]; // العنصر المحوري
    int cnt = l;

    for (int i = l; i <= r; i++)
    {
        if (arr[i] <= pivot)
        {
            swap(&arr[cnt], &arr[i]);
            cnt++;
        }
    }

    ascQuickSort(arr, l, cnt-2);
    ascQuickSort(arr, cnt, r);
}

// دالة الترتيب التنازلي
void descQuickSort(int arr[], int l, int r)
{

    if (l >= r)
    {
        return;
    }

    int pivot = arr[r];
    int cnt = l;

    for (int i = l; i <= r; i++)
    {
        if (arr[i] >= pivot)
        {
            swap(&arr[cnt], &arr[i]);
            cnt++;
        }
    }

    descQuickSort(arr, l, cnt-2);
    descQuickSort(arr, cnt, r);
}

int main() {

    // تعريف مصفوفة و ملئها مبدئياً بمجموعة من الأعداد يمكنك تغيير طريقة الملء بطلب الأعداد من المستخدم لاحقاً
    int arr[] = {10, 7, 9, 1, 8, 5, 2};
    // حساب عدد القيم التي تحتويها المصفوفة
    int n = sizeof(arr) / sizeof(arr[0]);
    ascQuickSort(arr, 0, n-1); // الترتيب التصاعدي
    printf("Ascending order: \n");
    printArray(arr, n); // طباعة عناصر المصفوفة
    descQuickSort(arr, 0, n-1); // الترتيب التنازلي
    printf("Descending order: \n");
    printArray(arr, n); // طباعة عناصر المصفوفة
}

نتيجة البرنامج : 

cpp_quicksort.thumb.PNG.8569a6aaf4468d232939531ddce8c4bd.PNG

لتجربة البرنامج اونلاين: إضغط هنا

بالتوفيق

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ 11 ساعات قال محمد ربيع زليول:

ستجدين الشرح الكامل للخوارزمية في هذه الصفحة: الترتيب بالإدراج.

تشرح الصفحة طريقة عمل الخوارزمية مع شرح إنشائها بالطريقة التكرارية والتعاودية مع الأكواد.

حسب السؤال المشار من طرفك، ستحتاجين الطريقة التعاودية.

حل الخوارزمية كالتالي:


#include <iostream> 
using namespace std; 

void insertionSortRecursiveAscending (int arr[], int n) 
{ 
	// الحالة الأساس
	if (n <= 1) 
		return; 

	// n-1 ترتيب أول العناصر التي تحمل القيمة 
	insertionSortRecursiveAscending( arr, n-1 ); 

	// إدراج العنصر الأخير في مكانه الصحيح ضمن المصفوفة المرتبة
	int last = arr[n-1]; 
	int j = n-2; 

    /* تحريك العناصر في المصفوفة
    arr[0..i-1]
    والتي تكون أكبر من المفتاح المعطى
    بمقدار موقع واحد عن موقعها الحالي
    */
	while (j >= 0 && arr[j] > last) 
	{ 
		arr[j+1] = arr[j]; 
		j--; 
	} 
	arr[j+1] = last; 
} 

void insertionSortRecursiveDescending(int arr[], int n) 
{ 
	// الحالة الأساس
	if (n <= 1) 
		return; 

	// n-1 ترتيب أول العناصر التي تحمل القيمة 
	insertionSortRecursiveDescending( arr, n-1 ); 

	// إدراج العنصر الأخير في مكانه الصحيح ضمن المصفوفة المرتبة
	int last = arr[n-1]; 
	int j = n-2; 

    /* تحريك العناصر في المصفوفة
    arr[0..i-1]
    والتي تكون أصغر من المفتاح المعطى
    بمقدار موقع واحد عن موقعها الحالي
    */
	while (j >= 0 && arr[j] < last) 
	{ 
		arr[j+1] = arr[j]; 
		j--; 
	} 
	arr[j+1] = last; 
} 

// دالة مساعدة لطباعة محتويات المصفوفة
void printArray(int arr[], int n) 
{ 
	for (int i=0; i < n; i++) 
		cout << arr[i] <<" ";
	cout << endl;
} 

/* اختبار الدوال السابقة */
int main() 
{ 
	int i;
  	int arr[10]; 
  	
  	cout << "enter 10 numbers: " << endl; // نطلب من المستخدم إدخال 10 أرقام
  
  	for (i = 0; i < 10; i++) {
    	cin >> arr[z]; // نقرأ الأرقام من المستخدم
    }
  
	int n = sizeof(arr)/sizeof(arr[0]); 

	insertionSortRecursiveAscending(arr, n); 
	printArray(arr, n); // نطبع قيم المصفوفة التصاعدية
	
	insertionSortRecursiveDescending(arr, n);
	printArray(arr, n); // نطبع قيم المصفوصة التنازيلة

	return 0; 
}

شكرا جعلها بموازين حسناتك 💕 

بتاريخ 9 ساعات قال عبود سمير:

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

البرنامج بلغة سي بلس بلس :


#include <iostream>
using namespace std;

// دالة لتبديل قيم متغيرين في الذاكرة من نوع عددي
void swap(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

// دالة مساعدة لطباعة عناصر مصفوفة عددية
void printArray(int arr[], int size)
{
    for (int i = 0; i < size; i++)
    {
        printf("%d ", arr[i]);
    }

    printf("\n");
}

// دالة الترتيب التصاعدي
void ascQuickSort(int arr[], int l, int r)
{

    if (l >= r)
    {
        return;
    }

    int pivot = arr[r]; // العنصر المحوري
    int cnt = l;

    for (int i = l; i <= r; i++)
    {
        if (arr[i] <= pivot)
        {
            swap(&arr[cnt], &arr[i]);
            cnt++;
        }
    }

    ascQuickSort(arr, l, cnt-2);
    ascQuickSort(arr, cnt, r);
}

// دالة الترتيب التنازلي
void descQuickSort(int arr[], int l, int r)
{

    if (l >= r)
    {
        return;
    }

    int pivot = arr[r];
    int cnt = l;

    for (int i = l; i <= r; i++)
    {
        if (arr[i] >= pivot)
        {
            swap(&arr[cnt], &arr[i]);
            cnt++;
        }
    }

    descQuickSort(arr, l, cnt-2);
    descQuickSort(arr, cnt, r);
}

int main() {

    // تعريف مصفوفة و ملئها مبدئياً بمجموعة من الأعداد يمكنك تغيير طريقة الملء بطلب الأعداد من المستخدم لاحقاً
    int arr[] = {10, 7, 9, 1, 8, 5, 2};
    // حساب عدد القيم التي تحتويها المصفوفة
    int n = sizeof(arr) / sizeof(arr[0]);
    ascQuickSort(arr, 0, n-1); // الترتيب التصاعدي
    printf("Ascending order: \n");
    printArray(arr, n); // طباعة عناصر المصفوفة
    descQuickSort(arr, 0, n-1); // الترتيب التنازلي
    printf("Descending order: \n");
    printArray(arr, n); // طباعة عناصر المصفوفة
}

نتيجة البرنامج : 

cpp_quicksort.thumb.PNG.8569a6aaf4468d232939531ddce8c4bd.PNG

لتجربة البرنامج اونلاين: إضغط هنا

بالتوفيق

شكرا جزاك الله خييير 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...