الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعده من فضلكم في برنامج ينفذ انواع الـ Sorting ويقارن بينها

بدأه SC Student في 27 فبراير 2011 · 16 رد · 1,991 مشاهدة · في الأسئلة المجابة
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

صباح/مساء الخير عليكم جميعا

أتمنى تكونوا بخير أخواني اعضاء الفريق العربي.. ويزيدكم تعاونا وصبرا ...

عذرا لدي الكثير لأقوله .. لكن لا اريد ان اطيل عليكم

اردت ان ابدأ بعمل برنامج ( يفضل بلغة السي _ لأنه مضت لي فتره طويله عن عالم البرمجه وللأسف الآن لا اكاد اتذكر او اتعرف الا على القليل من لغة C )

وبم اني دخلت عالم البرمجة مره اخرى ...

فعلي البدء بهذا البرنامج والذي :

1- يتم ادخال سلسله من الارقام كـ Array

وتتم عمليه Sorting عبر اسناد القيم في السلسله الى List وترتيبها داخل اللسيت باستخدام Binary tree .

حيث يتم استخدام انواع الفرز التاليه : Insertion sort و Bubble sort و Quicksort و heapsort .

2- لتكون مخرجات البرنامج هو جدول يقارن بين خوازميات الفرز من حيث عددالـ comparisons

و ايضا عدد الـ shifting/swapping/insertion لكل خوازميه Sorting مستخدمه

3- وان تكون الاداة المستخدمه قادره على تغيير المدخلات والتي هي sequence of elements' IDs الى مدخلات سيكونس باحجام N=10 , N=20 و N=30

.

.

.

يالهـــي :(( .... اعلم جيدا ان البرنامج معقد ومتطلباته كثيره ... لذا استعنت بكم بعد الله

فكل الرجاء الا تخيبوني .....

لكل من يساهم ولو بأقل مساعده .. له مني خالص الدعاء

فمن فرج عن مسلم كربة من كرب الدنيا فرج الله عنه كربة من كرب يوم القيامه ..

ودمتم بصحه ونعمه وامن ...

كل العذر ان كان الموضوع في غير محله او شيء من هذا القبيل .. لكن يعلم الله اني احترم قوانين المنتدى وحرصت كثيرا ان ابحث عن المكان المناسب لطرحه .. فـالرجاء الحار عدم حذف الموضوع .. بارك الله فيكم :)

تم تعديل هذه المشاركة بواسطة SC Student في 27 فبراير 2011 في 22:25

#2
اقتباس
السلام عليكم ورحمة الله وبركاته

و علیکم السلام و رحمة الله و برکاته،

اهلا و سهلا بک فی المنتدی.. سعدنا.

أخی، لا یجوز حل الواجبات و التمارین أو أی شیء من هذا القبیل، ان لدیک محاولة، فأکتب هنا لنساعدک فیها..

ولکن ألق نظرة بهذا الموقع، یوجد فیه کل الخوارزمیات الذی طلبت، باللغة C++ ، و کل ما علیک، استخدامهم فی برنامجک.. :)

ان وجدت مشکل فیه فأخبرنا..

و بارک الله فیک.

تم تعديل هذه المشاركة بواسطة C77431 في 27 فبراير 2011 في 22:43

2
#3

بارك الله فيكـ اخي C77431 وجزاك الله كل خير..

واشكركـ على الترحيب :)

بالنسبة للبرنامج ... انا بالطبع بدأت فيه

بدأت بخوارزميات الفرز وفهمت طريقة عملها

وبدأت بعمل الدالة main والتي ستتضمن مخرجات دوال الفرز لتقارن بينها

لكن

مشكلتي بتعريف المتغيرات .. يلتبس الامر علي

ولا استطيع كتابه دالة متكامله من حيث المدخلات والمخرجات

يعلم الله اني احاول وابذل قصاري جهدي في البحث عن المعلومه بنفسي ... لكن اذا توقف الامر عند البرمجه ... هنا ابدأ بفقدان الثقه بكل ما تعلمته :(

سأطلع على الرابط باذن الله ولو اني محتاره هل استخدم السي++ ام السي لان ما استرجعته حاليا بعضا من C

على كل اشكركـ على مبادرتكـ ... رزقك المولى الجنه ووالديك

تم تعديل هذه المشاركة بواسطة SC Student في 27 فبراير 2011 في 23:56

#4

السلام عليكم عدت من جديد مع محاولاتي المتواضعه

بدأت بتصور شكل الداله ( )main والتي تقوم بالتالي: ( كما هو مذكور بالأعلى )

اقتباس

1- يتم ادخال سلسله من الارقام كـ Array

وتتم عمليه Sorting عبر اسناد القيم في السلسله الى List وترتيبها داخل اللسيت باستخدام Binary tree .

حيث يتم استخدام انواع الفرز التاليه : Insertion sort و Bubble sort و Quicksort و heapsort .

2- لتكون مخرجات البرنامج هو جدول يقارن بين خوازميات الفرز من حيث عددالـ comparisons

و ايضا عدد الـ shifting/swapping/insertion لكل خوازميه Sorting مستخدمه

تصورت ادخال سلسله غير مرتبه من 10 ارقام وتنفيذ الانواع المختلفه للفرز على هذه السلسلة

سأكتب محاولتي بالنسبة لـ Bubblesort كأبسط انواع الفرز

حيث

سنحسب كل عملية مقارنه كمتغير X وكل عملية SWAP كمتغير Y

int n=10;       //define data size
int A[n];
struct per { 
int x;
int y;
} return p;

int bubble ( int A[ ], int n)
{
int i , j;
x=y=0;
for ( i=0 , i<n , i++) {
x= x+1;
for ( j=1 , j< (n-i) , j++) {
if ( a[j-1]<a[j] ) SWAP ( a[j-1] , a[j];
y=y+1;
}
return x,y;
}

***
void main( ) {
int A[n];

.........
p[1] = bubble( int A[ ], int n)
p[2] = InserstionSort(    )
p[3] = QuickSort(      )
.
.
.
.
.

}

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

لأن المطلوب طباعته هي مصفوفه تبين الجدول التالي

n Quick Heap Insert

Comp Exch Comp Exch Comp Exch

100 712 148 2842 581 2595 899

200 1682 328 9736 9736 10307 3503

الجدول غير متوازن .. لكن مثل هذه المخرجات مطلوبه .. 100 و 200 قيمة n وهي عدد عناصر المصفوفه المدخله ومقارنة عدد عمليات المقارنه والتبديل في كل فرز

لذا

:( .... من فضلكم اذا تكرم احد بمساعدتي قليلا في لغة سي ... لاكمال ما بدأته ..

(( ياربي سخر لي من يأخذ بيدي وسأكون ممتنه له )) :|

#5

46 مشاهدات :\

اين مبرمجي هذا الصرح الشامخ

اعرف ان ما اطلبه ما زال في المستوى البسيط .. كتصحيح للكود الذي كتبته

واعرف ايضا ان الكثير هنا قادر على التصحيح او حتى الارشاد

واثق ايضا بكرمكم ....

للعلم : انا لا ااعتمد على ما سيكتب .. لكن اريد ان استفيد منه لأقف على قدمي ( مثل ما يقولون) :|

#6

و علیکم السلام و رحمة الله..

و مرة أخری، dirty code آخر منی tongue.gif

مع Bubble sort و Insertion sort

و أیضا هذه الأکواد، لیست أفضل الأکواد و بالتأکید یوجد أفضل :)

[ لقد استخدمت بعض الخوارزمیات من الموقع الذی قلت سابقا ]

#include <iostream>
using namespace std;

class Arrays
{
private:
	int* arr;
	int* arrBackup;
	int arrSize;
	int bubSwap,bubCompare; // bubble sort swap and comparison
	int insSwap,insCompare; // insertion sort swap and comparison
public:
	Arrays(int size)
	{
		arrSize=size;
		arr=new int[arrSize];
		arrBackup=new int[arrSize];
		int element;
		for (int i=0; i<arrSize; i++)
		{
			cout<<"\nEnter array element:";
			cin>>element;
			arr=element;
			arrBackup=arr;
		}	
	}

	int arrReset()
	{
		for(int i=0; i<arrSize; i++)
			arr=arrBackup;
		return 0;
	}

	~Arrays()
	{
		delete [] arr;
		delete [] arrBackup;
	}

	void arrInsertionSort()
	{
  	insSwap=0;
  	insCompare=0;
  	int i, j, tmp;
  	for (i = 1; i < arrSize; i++)
  	{
        	j = i;
        	while (j > 0 && arr[j - 1] > arr[j])
			{
		  		insCompare++;
		  		insSwap++;
              	tmp = arr[j];
              	arr[j] = arr[j - 1];
              	arr[j - 1] = tmp;
              	j--;
        	}
			insCompare++;
  	}
	}

	void arrBubbleSort() 
	{
  	bubSwap=0;
  	bubCompare=0;
  	bool swapped = true;
  	int j = 0;
  	int tmp;
  	while (swapped) 
  	{
        	swapped = false;
        	j++;
        	for (int i = 0; i < arrSize - j; i++,bubCompare++) 
			{
              	if (arr > arr[i + 1]) 
		  		{
						bubSwap++;
                    	tmp = arr;
                    	arr = arr[i + 1];
                    	arr[i + 1] = tmp;
                    	swapped = true;
              	}
        	}
  	}
	}

	void result()
	{
		cout<<"\nBubble Sort: "<<bubCompare<<" compare and "<<bubSwap<<" swapping";
		cout<<"\nInsertion Sort:"<<insCompare<<" compare and "<<insSwap<<" swapping\n";
	}
};

int main()
{
	int size;
	cout<<"\nEnter the length of the array: ";
	cin>>size;

	Arrays arrOfNum(size);
	arrOfNum.arrBubbleSort();
	arrOfNum.arrReset();
	arrOfNum.arrInsertionSort();

	arrOfNum.result();

	system("pause");
	return 0;
}

تم تعديل هذه المشاركة بواسطة C77431 في 28 فبراير 2011 في 18:05

1
#7

واااااااااااااااو

خساره اني لم اتمكن من رؤية الموضوع الا الآن

لكـ جزيل الشكر والعرفان على سرعة الاستجابه والرد

بــــــــــــــــــــــــــــــــاركـ الله فيكـ أخي

وفررررج الله همــــــكـ .. كما ساهمت بتفريج بعضا من همي...

اخي لا ادري ما يمكنني قوله ... لكن قبل هذه اللحظه كنت في حيرة شديده هل اكمل في C

رغم اني لم اجد مراجع عنها .. وسيكلفني ذلك وقتا وجهدا .. وقد لا اخرج بفائدة تذكر

لكن من الآن ... علي ان اقرر ان تكون بدايتي مع C++ ولو ان شرح بعض تراكيب البيانات للمعطيات الأخرى سيكون بـ C ... لكن اتمنى التييسير من الله وان استطيع تحويلها وفهم ما يقابلها في C++

اطلعت على الكود ولم ادقق فيه كثيرا _ من شدة العجله للرد :) _ لكن هناك بعض الاسئلة

وارجوا ان تعذرني ان ازعجتكـ .. وتعذرني ان كان فيها نوع من عدم المعرفه الكافية :

اولا : مالفائدة من دالة int arrReset()

ثانيا : لماذا نحذف المصفوفتين [] arr و []arrBackup

ثم نعود ونستخدم المصفوفه arr في دوال الفرز

اعتذر مرة اخرى .... اخي .. ولي عودة مدققه غدا باذن الله

نيتي غدا ان ابحث في مكتبة الجامعة عن كتاب مفيد في تعلم C++ بوقت اسرع ... لذا ان كان لديكـ كتاب ما توصيني فيه ... قد يساعد في هذا البرنامج

لأني قد احتاج لترتيب المصفوفه المدخله في Linked List عاديه ثم اجراء البحث الثنائي عن عنصر ما في هذه السلسله

اذن سيكون لدينا بناء الليست والذي انا بصدد فهمه الآن ولكن بكود C وهذه هي المشكله ..

لكن لدي القدرة ولله الحمد على فهم وتحليل الاكواد المعطاه :) اعلم ان هذا ليس من علم البرمجه في شي :\

#8

فی البدایة، تلک أکوادی، لیست فیه کل المطلوب ( QuickSort و HeapSort و ... ) فیمکنک اضافتهم فی المکان المناسب...

اقتباس
اولا : مالفائدة من دالة int arrReset()

ثانيا : لماذا نحذف المصفوفتين [] arr و []arrBackup

ثم نعود ونستخدم المصفوفه arr في دوال الفرز

مع معلوماتی الحالی ،انا لست متقن فی برمجة OO ، لهذا یمکن یوجد للخبراء طریقة أفضل، ولکن

حینما نقوم بـSort فیصبح المصفوفة مرتبة، و لاستخدامها مرة أخری فی دالة فرز آخر بشکل غیر مرتبة، نستخدم arrReset()

یوجد طریقة أفضل، ان نستخدم فی کل دالة فرز، array of pointers ، فإذً لا نحتاج بarrReset و فقط نتغیر مکان المؤشرات...

(أتمنی یکون کلامی، کلام غیر عرب، واضح )

بالتوفیق،

تم تعديل هذه المشاركة بواسطة C77431 في 1 مارس 2011 في 16:50

2
#9

آآآآه من النت ... اضاع علي الوقت :(

( كان متعطل طول اليوم )

اخي عافاك الله ... ممتنه جدا للسماح بوقتكـ هنا ( وبالعكس كلامكـ مفهوم وواضح جدا :) )

مبدئيا .. ارى الاكواد مناسبه ( لأن الاهم اني افهمها ولو لم انفذها حتى الآن )

.............

بالنسبة لدالة arrRest فهمت الغرض منها ... حيث ستنادى قبل كل فرز _ جيدا جدا ^_^

لكن ~Arrays() دالة حذف .. صحيح؟

هل الغرض من الحذف خفظ للذاكره مثلا ام لماذا

ايضا العلامة ~ مرتبطه بالامر delete []

؟؟

اعذرني اخي لكن لا اعرفها وحاولت ايجادها في كتاب بين يدي الآن وهو

C++ How to Program

هل تظن اني سأنتفع منه :\

لأن اريد استرجاع الكثير وبأسرع وقت ..

ولأن هناك خطوه مهمه جدا _ واعتبرها صعبة علي الآن _ وهي بعد المقارنه بين مخرجات دوال الفرز

يجب ان يقوم البرنامج بترتيب عناصر السلسلة الاصليه المدخله من المستخدم

يأخذ عناصر الـ Array ويرتبها داخل Linked list

وبعد ذلك خطوة البحث:

وهي ان يدخل المستخدم رقم .. ثم يقوم البرنامج بالبحث داخل الليست

Binary Search

انا الان احاول استرجاع بناء الليست وترتيب الـنود ...

لكني اتدرب ببطئ والوقت يداهمني

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

يعلم الله اني في امس الحاجه للتعلم ((( السررررريع ))) سئمت من البطئ بسبب قدم العهد في البرمجه :( للأسف

عذرا .. لكن بالنسبة لاضافه نوعين الفرز الباقيين .. سأقوم بتأجيل ذلك الآن عالاقل

لعلي اقدم شيئا في الليست والبحث الثنائي داخلها

اللهم سهل لي واجعلني اكثر فهما واستيعابا .. يااااكريييييييييم

تم تعديل هذه المشاركة بواسطة SC Student في 2 مارس 2011 في 01:31

#10
SC Student كتب:

لكن ~Arrays() دالة حذف .. صحيح؟

هل الغرض من الحذف خفظ للذاكره مثلا ام لماذا

ايضا العلامة ~ مرتبطه بالامر delete []

؟؟

اعذرني اخي لكن لا اعرفها وحاولت ايجادها في كتاب بين يدي الآن وهو

C++ How to Program

هل تظن اني سأنتفع منه :\

لأن اريد استرجاع الكثير وبأسرع وقت ..

~Arrays() ليست دالة وانما هى هادم destructor

يتم استدعاؤه تلقائيا عند انتهاء استخدام الفئة class فى البرنامج (اى اننا لم نعد بحاجة اليها الان)

لذلك نقوم بحذف المصفوفتين من الذاكرة delete []

بالنسبة للكتاب فهو رائع جدا وخاصة النسخة الخامسة منه 5th edition

اظنك ستستفيد منه كثيرا

تحياتى

1


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#11

باركـ الله فيكـ اخي الفاضل MOHAMED FATHEI

ؤأشكرك على ابداء رأيكـ وطمأنتي بخصوص الكتاب

_ عندي النسخة السابعه :) _

واشكركـ ايضا على توضيح نقطة الحذف من الكلاس

اذا افهم ان الحذف فقط يكون عندما نستخدم class

....

لكن هذه الـ class صعبه في تركيبها

ولا اعرف فيها شيئا ولم احب استخدامها

**********************

هل بامكانكـم مساعدتي في تحويل الكود السابق الى struct بدلا من class

******************

لأني اريد بناء عناصر الـ Linked list كـ struct ايضا والتي هي نفسها عناصر المصفوفه الاصليه المدخله

ستكون اضافة العناصر من بداية الليست بعمل دوران يمر على عناصر الـ array

وتضاف عبر دالة

arr() addtoList

سأكتب الخوارزمية لعلها تساعد في كتابة الكود في C++ والذي لا استطيع اتقانه :(

لأني مازلت اتدرب والوقت يداهمني

فهل هناكـ من يساعد .. جعلكم الله جميعا من احبابه وأولياؤه ^_^

تم تعديل هذه المشاركة بواسطة SC Student في 2 مارس 2011 في 13:25

#12

شکرا للأخ محمد..

بالنسبة للکتاب، کما اخبرتنا بأن لدیک معلومات من قبل فی هذا الموضوع،

الکتاب C++ how to program یدرس من البدایة، و یمکن یکون لک ممل، ایضا یوجد لذلک الناشر کتاب آخر : For programmers ، و هذا یناسب لمن یعلم شیء من قبل...

علی ای حال، الق نظرة بموقع Deitel هنا

#13

شكرا لك انت اخى C77431

ال struct ليس بينه وبين ال class فرق الا فى ان المتغيرات فى الفئة كلاس تكون بصفة افتراضية default غير مرئية private

اما فى struct فهى تكون public اى يمكن التحكم فيها من خارج ال structure

على كل هذا هو الكود

ما غيرت الا كلمة class الى struct

#include <iostream>
using namespace std;

struct Arrays
{
private:
    	int* arr;
    	int* arrBackup;
    	int arrSize;
    	int bubSwap,bubCompare; // bubble sort swap and comparison
    	int insSwap,insCompare; // insertion sort swap and comparison
public:
    	Arrays(int size)
    	{
            	arrSize=size;
            	arr=new int[arrSize];
            	arrBackup=new int[arrSize];
            	int element;
            	for (int i=0; i<arrSize; i++)
            	{
                    	cout<<"\nEnter array element:";
                    	cin>>element;
                    	arr=element;
                    	arrBackup=arr;
            	}   	
    	}

    	int arrReset()
    	{
            	for(int i=0; i<arrSize; i++)
                    	arr=arrBackup;
            	return 0;
    	}

    	~Arrays()
    	{
            	delete [] arr;
            	delete [] arrBackup;
    	}

    	void arrInsertionSort()
    	{
    	insSwap=0;
    	insCompare=0;
    	int i, j, tmp;
    	for (i = 1; i < arrSize; i++)
    	{
            	j = i;
            	while (j > 0 && arr[j - 1] > arr[j])
                    	{
                            	insCompare++;
                            	insSwap++;
            	tmp = arr[j];
            	arr[j] = arr[j - 1];
            	arr[j - 1] = tmp;
            	j--;
            	}
                    	insCompare++;
    	}
    	}

    	void arrBubbleSort() 
    	{
    	bubSwap=0;
    	bubCompare=0;
    	bool swapped = true;
    	int j = 0;
    	int tmp;
    	while (swapped) 
    	{
            	swapped = false;
            	j++;
            	for (int i = 0; i < arrSize - j; i++,bubCompare++) 
                    	{
            	if (arr > arr[i + 1]) 
                            	{
                                            	bubSwap++;
                    	tmp = arr;
                    	arr = arr[i + 1];
                    	arr[i + 1] = tmp;
                    	swapped = true;
            	}
            	}
    	}
    	}

    	void result()
    	{
            	cout<<"\nBubble Sort: "<<bubCompare<<" compare and "<<bubSwap<<" swapping";
            	cout<<"\nInsertion Sort:"<<insCompare<<" compare and "<<insSwap<<" swapping\n";
    	}
};

int main()
{
    	int size;
    	cout<<"\nEnter the length of the array: ";
    	cin>>size;

    	Arrays arrOfNum(size);
    	arrOfNum.arrBubbleSort();
    	arrOfNum.arrReset();
    	arrOfNum.arrInsertionSort();

    	arrOfNum.result();

    	system("pause");
    	return 0;
}

انا استخدم c++ how to program كمرجع فهو منظم جدا

تقبلوا تحياتى


﴿وَمَا كَانَ اللَّهُ لِيُعَذِّبَهُمْ وَأَنْتَ فِيهِمْ ۚ وَمَا كَانَ اللَّهُ مُعَذِّبَهُمْ وَهُمْ يَسْتَغْفِرُونَ﴾

الأنفال ۳۳                                  
 

#14

شكرا اخي C77431 و محمد

عافاكما الله

اخي محمد صحيح الكتاب منظم وملون ومريح :)

بالنسبة للكود ... شيء جيد انه لا نغير الكثير في class لكن ما اردته هو ان تكون المتغيرات داخل struct بدون استخدام private و public

مثلا

[10; code]#define data size

كأني اعرف المصفوفه A من n عنصر Array (Input data) \\ int A[n];

1 \\ struct per {

int x;

int y;

}p,r;

حيث per تعني performance ونعرف p كمصفوفه كل عنصر فيها رقمين لقياس اداء دالة فرز معينه .. رقم يعني عدد المقارنات والآخر عدد التبديلات

لان المخرجات ستكون على شكل جدول سأضع الصوره

void main( ) {
int A[n];
هنا ادخال حجم السلسلة
كما في الكود 

لكن في الطباعة تسند دوال الفرز الى p  حيث تطبع p  كمصفوفه من 4 عناصر بعدد دوال الفرز لكل داله عمودين عدد المقارنات وعدد التبديلات

per p[4]; 

.........

للطباعه 
 for ( i ) 
حيث i من 0 الى  4
p.x
p.y
p[0] = bubble( int A[ ], int n)
p[2] = InserstionSort(    )
p[3] = QuickSort(      )
Heap sort
.
.
.

اعتذررررر جدا على سوء الكتابه ... لكن اريد ايضاح الخوارزميه وكيفيه المخرجات

:\

#15
#include <iostream>
using namespace std;

struct Arrays
        {
        int* arr;
        int* arrBackup;
        int arrSize;
        int bubSwap,bubCompare; // bubble sort swap and comparison
        int insSwap,insCompare; // insertion sort swap and comparison
        }arrNum;

typedef Arrays arrNum(int size)

void InterNum(int s) ******
        {       size=s;
                arrSize=size;
                arr=new int[arrSize];
                arrBackup=new int[arrSize];
                int element;
                for (int i=0; i<arrSize; i++)
                {
                        cout<<"\nEnter array element:";
                        cin>>element;
                        arr=element;
                        arrBackup=arr;
                }       
        }

        int arrReset()
        {
                for(int i=0; i<arrSize; i++)
                        arr=arrBackup;
                return 0;
        }

        ~Arrays()
        {
                delete [] arr;
                delete [] arrBackup;
        }

        void arrInsertionSort()
        {
        insSwap=0;
        insCompare=0;
        int i, j, tmp;
        for (i = 1; i < arrSize; i++)
        {
                j = i;
                while (j > 0 && arr[j - 1] > arr[j])
                        {
                                insCompare++;
                                insSwap++;
                tmp = arr[j];
                arr[j] = arr[j - 1];
                arr[j - 1] = tmp;
                j--;
                }
                        insCompare++;
        }
        }

        void arrBubbleSort() 
        {
        bubSwap=0;
        bubCompare=0;
        bool swapped = true;
        int j = 0;
        int tmp;
        while (swapped) 
        {
                swapped = false;
                j++;
                for (int i = 0; i < arrSize - j; i++,bubCompare++) 
                        {
                if (arr > arr[i + 1]) 
                                {
                                                bubSwap++;
                        tmp = arr;
                        arr = arr[i + 1];
                        arr[i + 1] = tmp;
                        swapped = true;
                }
                }
        }
        }

        void result()
        {
                cout<<"\nBubble Sort: "<<bubCompare<<" compare and "<<bubSwap<<" swapping";
                cout<<"\nInsertion Sort:"<<insCompare<<" compare and "<<insSwap<<" swapping\n";
        }
};

int main()
{
        int size;
        cout<<"\nEnter the length of the array: ";
        cin>>size;

        InterNum(size);
        arrOfNum.arrBubbleSort();
        arrOfNum.arrReset();
        arrOfNum.arrInsertionSort();

        arrOfNum.result();

        system("pause");
        return 0;
}

حاولت احول الى struct

لكن لم اعرف كيف اعرف دالة ادخال عناصر المصفوفه

هنا void InterNum(int s) ******

يطلع لي اول خطأ في هذا السطر

الله يرضى عليكم الخطأ بسيط .. من يصححه ارجوكم

:\

تم تعديل هذه المشاركة بواسطة SC Student في 2 مارس 2011 في 21:39

#16

و علیکم السلام...

لا اعلم لماذا کتبت الأکواد بهذا الشکل، ولکن إلیک تغییر بسیط فی أکوادک ( یبدوا یشتغل الآن ):

#include <iostream>
using namespace std;

struct Arrays
    	{
    	int* arr;
    	int* arrBackup;
    	int arrSize;
    	int bubSwap,bubCompare; // bubble sort swap and comparison
    	int insSwap,insCompare; // insertion sort swap and comparison
    	};

Arrays arrNum;
void InterNum(int s)
    	{   	int size=s;
            	arrNum.arrSize=size;
            	arrNum.arr=new int[arrNum.arrSize];
            	arrNum.arrBackup=new int[arrNum.arrSize];
            	int element;
            	for (int i=0; i<arrNum.arrSize; i++)
            	{
                    	cout<<"\nEnter array element:";
                    	cin>>element;
                    	arrNum.arr=element;
                    	arrNum.arrBackup=arrNum.arr;
            	}   	
    	}

    	int arrReset()
    	{
            	for(int i=0; i<arrNum.arrSize; i++)
                    	arrNum.arr=arrNum.arrBackup;
            	return 0;
    	}

    	void arrInsertionSort()
    	{
    	arrNum.insSwap=0;
    	arrNum.insCompare=0;
    	int i, j, tmp;
    	for (i = 1; i < arrNum.arrSize; i++)
    	{
            	j = i;
            	while (j > 0 && arrNum.arr[j - 1] > arrNum.arr[j])
                    	{
                            	arrNum.insCompare++;
                            	arrNum.insSwap++;
            	tmp = arrNum.arr[j];
            	arrNum.arr[j] = arrNum.arr[j - 1];
            	arrNum.arr[j - 1] = tmp;
            	j--;
            	}
                    	arrNum.insCompare++;
    	}
    	}

    	void arrBubbleSort() 
    	{
    	arrNum.bubSwap=0;
    	arrNum.bubCompare=0;
    	bool swapped = true;
    	int j = 0;
    	int tmp;
    	while (swapped) 
    	{
            	swapped = false;
            	j++;
            	for (int i = 0; i < arrNum.arrSize - j; i++,arrNum.bubCompare++) 
                    	{
            	if (arrNum.arr > arrNum.arr[i + 1]) 
                            	{
                                            	arrNum.bubSwap++;
                    	tmp = arrNum.arr;
                    	arrNum.arr = arrNum.arr[i + 1];
                    	arrNum.arr[i + 1] = tmp;
                    	swapped = true;
            	}
            	}
    	}
    	}

    	void result()
    	{
            	cout<<"\nBubble Sort: "<<arrNum.bubCompare<<" compare and "<<arrNum.bubSwap<<" swapping";
            	cout<<"\nInsertion Sort:"<<arrNum.insCompare<<" compare and "<<arrNum.insSwap<<" swapping\n";
    	};

int main()
{
    	int size;
    	cout<<"\nEnter the length of the array: ";
    	cin>>size;

    	InterNum(size);
    	arrBubbleSort();
    	arrReset();
    	arrInsertionSort();

    	result();

    	system("pause");
    	return 0;
}

بالتوفیق :)

تم تعديل هذه المشاركة بواسطة C77431 في 2 مارس 2011 في 22:56

#17

بارك الله فيكـ

ولك جزيل الشكر

انا وضعت int s وهذا ليس له حاجه

عدلت وحذفت هذا المتغير

Arrays arrNum;
void InterNum(int size)
        {       
                arrNum.arrSize=size;
                arrNum.arr=new int[arrNum.arrSize];
                arrNum.arrBackup=new int[arrNum.arrSize];
                int element;
                for (int i=0; i<arrNum.arrSize; i++)
                {
                        cout<<"\nEnter array element:";
                        cin>>element;
                        arrNum.arr=element;
                        arrNum.arrBackup=arrNum.arr;
                }       
        }

اردت دالة arrNum حتى تكون دالة مستقله تبني Array من نوع struct

لأني لا اعرف استخدم class

:) فقط هذا سبب التغيير في كودكـ الرائع :)

الخطوة التالية سأضيف Quicksort

ثم Heapsort

مواضيع مشابهة

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…