صفحه 1:
۳ jo ‏بانی کامپیوتر و برنامه سازی‎ ‏فصل دهم : آرایه ها‎ ‏تهیه اسلایدها: دکت‎ Hod ‏ایدها: دکتر سعبد ابر‎ ‏يد ابريسمى‎ مدرس : رس : سيد كاظم شكفته

صفحه 2:
‎sess‏ ۳ آرایه ها * در مبحث | الكوريتمها با يك ساختمان داده مهم, يعني آرایه ‏© البته د © ‎oils, giles bu‏ هاي ديكر ي همجون ساختارها نیز وجود دارند, اما آرایه ها همچنین مهمترین ساختمان داده موجود در اين ‎oe,‏ ‏۶ آرایه د ) عبارنست از مجموعه اي از داده هاي همنوع ل ‎he Ca‏ نام مشترك و در خانم هاي متوالي فط ‎Se te ol‏ عناصر آرایه, باید از نام آرایه بعلا ي دسترسي به عناصر ارایه. باید از نام ارایه بعلاوه أنديس استفاده كرد. 7 7 ‏* در قسمتهاي بعديء, نحوه تعريف و استفاده از ارايه ها را تشريح خواهيم

صفحه 3:
۱-۵۰ آرایه های یک بعدی ۰ پیش از آنکه بتوان از يك آرایه يك بعدي استفاده کرد, باید آن را اعلان د. * اعلان آرایه ها بصورت زیر انجام مي گردد: ‎<type> <var-name>[<size>] ;‏ ۴ بعنوان مثال: ‎int A[10];‏ * خط بالا يك آرایه 10 تايي از اعداد صحیح بنام ۸ ایجاد مي نماید. * هر کدام از عناصر این آرایه مي توانند بعنوان يك متغیر مستقل مورد استفاده قرار گیرد. * براي دسترسي به عناصر این آرایه باید از اندیس استفاده نمود. در زبان ) اندیسها در داخل کروشه [] قرار مي گيرند. © نکته بسیار مهمي که باید بدان توجه کرد آنستکه در 6 اندیس يك عدد صحيح است كه أز 0 أغاز مي كردد.

صفحه 4:
':::: ۱-۱۰ آرایه های یک بعدی ‎rt @[G0) ;‏ © ! ! | ! | QO] ۵10 [2] OP] eS] ۵6-9:

صفحه 5:
۱-۰ آرایه های یک بعدی : ‏درف و بیس چاه مد او از ماگ كلق‎ pate lt Ie antes fat lank he othe, ana ce ‎Eh‏ بش وق لكر لاسي ب ]کی لد چل ندز له ‎ny‏ شفنب ی ره ‎ ‎‘include <stdio.h> ‎‘oid maind { ۳‏ آرايه نكهنايعمعدل لتشجويان/ ‏ :(100]وف6لة متا آرليه تكهد يليه «انشجوانا 10100 ا وما استكيك ل لشحوانا ‏ :عودعتضافيها ‎float‏ ‎int in:‏ ‎Brinti(enter numberof students :°) Seant(%ea", Sa ‏دییات هداد دنشجوان/‎ ‏حلفه یناف شخصانتانشجوباو مخاسیه مبانگین‌معدلها 120101 :0 001 ی | ‎totalAverage += averagelil:‏ > زو دا ‎totalaverage‏ ‏حلقه دريافتصقايسه معدلهر دلنشجو با مباتكيركلاسو جاتعيام متاسلة ( لج ادم 0:1 60610 ‎It (averagefi} >= totalaverage + 1)‏ ‎printf("6ld excellent fn", ii):‏ ‎elseif (averageli] >= totalaverage - 1)‏ ‎printf("Sld : good In, ii)‏ ‎cele print("%ld = weak Nin, lai):‏ ‎ ‎ ‎

صفحه 6:
:۱-۱۰ آرایه های یک بعدی * جند نكته مهم راجع به آرايه در © وجود درد كه حتما بايد به آنها دقت كنيد * اندازه آرايه ها در © ثبت بوده و حتما بايد توسط بك مقدار ثابت صحيح تعيين كردد. بعنوان با ا قن ا کرد ‎int n;‏ ‎n=100 ;‏ ‎int Aln);‏ ‎Ll‏ توان با استفاده از متغير هاى ثابت (ثابتهاي داراي نام). اندازه آریه را ‎gua‏ 515 2 اي بعدي ‎ay‏ آن آشاره خواهد شد pais" ‏آرايه ها در © عدد رده و هميشه ود. لذا به تفاوت‎ iL Jr ae ‏خنصر أرايه” يعد شه أن 8 شروع مي شود. لذا يع تفاوت‎ ag" ‏4و‎ eae ‏خطاهاي متطقي مي گردد.‎ 9 6 آرايه ها ردد. بدين معنا كه جنا: اند محدوده مجاز يك ‎S38 PALES epee the sit is |‏ اي منطقي خواهد کرد. بعنوان مثا ‎int A[10];‏ ‎A(12] = 20 ; //this is not a syntax error but a logical error 7‏ لذا بررسي مرزهاي آرايه بعهزه خود برنامه نوين است و بايد از درستي برنامه خود و خارج نشدن جار ان ا از محدوده

صفحه 7:
۱-۰ آرایه های یک بعدی مقداردهي اولیه به آرایه هاي يك بعدي بصورت زیر انجام مي پذیرد: ‎int A[3] = {5, 2, 8};‏ که در اینجا [۸]0 برابر 5 , [۸]1 برایر 2 و [۸]2 برابر 8 خواهد شد. علاوه ترا إن فقط بد تغدادي ار عناضر آرابه مقدار داد دزلیتمتوزت: مهد عناصر باقیمانده آرایه اتوماتيك 0 خواه که مقدار دا درابتصورت مار ‎int B[10] = {5, 8};‏ در اينجا عناصر [8]2 يم بعد مقدار 0 ‎as ales‏ بنابراین مي توان براي 0 کردن عتاصر يك أرأية به ‎int C[10] = {0};‏ به آرایه مقدار دهي اولیه کرده با ان تعداد عناصر آرایه را نیز" جنانجريه أرايم قدا ن دای أوايه كردم باقيم» موق تما مدا دا الو كد خواهد شد ‎int C[] = {10, 15, 20};‏ در مثال فوق آرایه > با 3 عضو درنظر گرفته مي شود.

صفحه 8:
۲-۰ متغیرهای ثابت همانطور که در قسمت قبل گفته جه اندازه يك آرایه ‎cali ub‏ صحبح شام ‎gusto ol Cie‏ یا متغير ثابت» ي است که فقط مي تواند در هنگام اعلان مقدار |وليه کیرد وا مقدار دیگر قابل تغییر تیست. براي اعلان متگيرها هاي ثابت, از كلمه ‎const gals‏ قبل از نوع متفیر استفاده مي کردد. بعنوان مثال: ‎const int k = 10;‏ نه تلاش ‎Le‏ مقدار , باعث ایجاد تك خطاي تحوی توسط ‎esse‏ مر و ‎Gil‏ متغيرها دن تغزيف: م فاد تابتی که مقدار آنها در طول برنامه تغییر نمی كندء بکار می روند بعنوان مثال : ‎const float pi = 3.14;‏ كار نه تنها خوانابى برنامم را لا مي برد (بدلیل استفاده از كلمع أن كه برای همه شتاخته شده است), بلکه باعث مى شود تقببر بذيرق برنامه نيز بالا د. بد > ام تصميم كرفت مقدار ثابت عوض کند نيازى به تقبير كل برنامه نبست و فقط كافى است مقدار أوله متغیر را عوض

صفحه 9:
: ۲-۱۰ متغیرهای ثابت * از این مسئله می توان در تعریف آرایه ها نیز استفاده کرد. * بدین صورت که بجای آنکه اندازه آرایه را با یک ثابت صحیح مشخص نماییم, آن را با یک متغیر ثابت تعریف می کنیم. * با اینکار, درصورتیکه نیازی به تغییر اندازه آرایه (يا آرایه ها) گردد, فقط کافی است مقدار اولیه متفیر ثابت خود را تغیبر دهیم. *؟ مثال 2) برنامه اي بنویسید که سال ورود تعدادي دانشجو را دریافت و سپس تعداد ورودي هاي سالهاي 75 تا 84 را محاسبه و چاپ نماید.

صفحه 10:
#include <stdio.h> void main() { const int startYeat const int yearNi int countlyearNo] int i, n, year; printf("enter student no : scanf("%d" &n); for (i=0; i<n ; i++) { printf("enter entrance yea scanf("%d",&year); count [year - startYear] ++; 1 for (i=0 ; i<yearNo ; i++) printf("year = %d count = %d \n",startYear + i , countli]);

صفحه 11:
: ۳-۱۰ آرایه های چندبعدی 9 نطور كه در يخش الكوريتمها كفته شدء آرايه ها مي توانند داراي ابعاد بيشتري نيز باشند * در زبان © نيز مي توان يك آرايه جند بعدي را بصورت زير اعلان کرد: ‎<type> <var-name>[<size 1>][<size 2>] ... [<size n>] ;‏ * بعنوان مثال, اعلان زیر يك آرایه دوبعدي را معرفي مي نماید: ‎int A[5][8] ;‏ * برأى دسترسي به هر عنصر إن اين آرايه بابد از دو تلامت [] اسيتفاده كرد. توجه كنيد ها و ستونها هر دو أز 0 آغاز مي دند.

صفحه 12:
:: ۲-۱۰ آرایه های جندبعدی :6 « 3 م © و ه و 086 ه © ( ‎ae)‏ 0 م )سر ‎el fe‏ ‎el 1?‏ of 2 3] ‏6[]0]ه‎ > 66 :

صفحه 13:
۳-۰ آرایه های چندبعدی ° لته در مورد آریه هاي با ابعاد بالاتر نیز به شکل مشابهي عمل مي دد. ۰ يعنوان مثال به نحوه استفاده از يك آرایه سه بعدي در مثال زیر دقت int B[S][8][6] ; B[2][4][0] = 12; * مثال 3) یکی از اساتید قصد دارد آماری از نمرات دانشجویان خود در پیز های بین ترم تهیه نماید. وی 5 گوییز در طول ترم برگذار نموده است و اکنون نیاز به اطلاعات زیر دارد: * میانگین نمرات هر دانشجو برای کل کوییزها © میانگین تمرات کل دانشجوبان برای فر کوب برنامه اي بنویسید که نمرات دانشجویان را براي 5 کوییز دریافت ‎otue‏ سيد كه “مرا | شجوبارورا براقم 5 كوبيز ذريافت زو

صفحه 14:
:۲-۱۰ آرایه های چندبعدی کوییز کوبیز کوییز کوییز کویبز پنجم چهارم سوم دوم اول ‎{til‏ ‏میس افاللجوتاول: جه دانشجوی دوم مب دانشجوی سوم

صفحه 15:
: ۳-۱۰ آرایه های چندبعدی #include <stdio.h> const int maxStudent = 100; ‏حجلکثر تعداد دلنشجویارا/‎ const int quizNo = 5; ‏تعداد كوتيزها//‎ void main() { ‏ب‎ ‎float grades[maxStudent][quizNo]; /نايوجشنل ‏آرليه نكهدارئنمرات‎ float quizAverage, ‏میانگینن مرانتهر کونیز//‎ studentAverage; ‏میانگینت مراتهر دلنشجو//‎ inti, j, n; printf("enter number of students: "); 56۵066960۳ ‏دریافنتعداد دلنشجویار/ ... :(طی6,‎ حلقه دریافناطلاعاندلنشجوبار)/ ‎for (i=0 ; i<n ; i++) {‏ ‎printf(student no %d:\n",i+1);‏ ‎for (j=0 ; j<quizNo ; j++) {‏ ‎printf(“enter grade of quiz %d: ", j+1);‏ ‎scanf("%f", &gradesfillj]);‏ 1 1

صفحه 16:
: ۳-۱۰ آرایه های چندبعدی حلقه هاعمتداخلب راعمحاسبه میانگیننمراتهر دلتشجوا/ ‎printf(*Student's averages:\n");‏ ‎for (i=0 ; i<n; i++) {‏ ‎studentAverage = 0.0;‏ ‎for (j=0; j<quizNo; j++)‏ ‎studentAverage += gradesfillj];‏ studentAverage /= quizNo ; printf("student no %d: average=%f \n",i+1, studentAverage); 1 حلقه هاعمتداخلی رایمحاسبه میانگینن مران‌هر کوثیزا/ ‎printf(“Average of each quiz:\n");‏ ‎for (j=0 ; j<quizNo ; j++) {‏ ‎quizAverage = 0.0;‏ ‎for (i=0; i<n; i++)‏ ‎quizAverage += gradesfillj];‏ quizAverage /=n; printf("quiz no %d: average=%f \n",j+1, quizAverage); 1 +

صفحه 17:
۳-۰ آرایه های چندبعدی * و نکته آخر اینکه مقداردهي اولیه به آرایه هاي چندبعدي آمکان پذیر است و بصورت زير انجام مي پذیرد: ‎int A[3I4] = { (12, 5, 3, 8}, 3,7, -9, 2}, (4, 22, 18, 61 (:‏ * يعني يك علامت () براي كل مقداردهي قرار مي كيرد. سبس هر رديف از آرايه در داخل يك (1 مجزا قرار مي * براي ابعاد بالاتر نيز به روش مشابهي عمل مي كردد. بعنوان مثال براي ارايه هاي سه بعدي داريم: int A[2][3][4] = { { {12, 5, 3, 8}, {-3, 7, -9, 2}, {4, 22, 18, 6} }, { {8, 1, -3, 4}, {-2, 8, 11, 21} , {7, 3, -15, - 8}}};

صفحه 18:
7 ۴-۰ ارسال آرایه های یک بعدی به توابع * آرایه ها را نیز همچون سایر نوع داده ها می توان به یک تابع ارسال کرد. برای اینگار ابتدا باید تابع را بگونه ای تعریف کنیم که یک پارامتر از نوع آرایه را دریافت کند. * فرض کنید تابعی بنام 5۱۲۱۸۵۲۲۵۷ داریم که یک آرایه یک بعدی از اعداد ‎w‏ را بعنوان ورودی دریافت می نماید و مجموع عناصر آن را باز مى ‎ube‏ * تعريف اين تابع بصورت زير است: int sumArray(int A[], int size) { int i, sum = 0; for (i=0; i<size; i++) sum += Ali]; return(sum) ; }

صفحه 19:
۴-۰ ارسال آرایه های یک بعدی به توابع * همانطور كه من بینید, اندازه آرایه مشخص نشده است و این یک نکته مثبت است؛ چرا ا مى توانة هر أرايه صحيحى را با هر تا آی دریاقت ‎eels‏ ‏۰ درواقع حتى اكر اندازه آرايه را نيز مشخص نماييد. كامبايلر از آن صرفتظر خواهد كرد. دومین پارامتر, اندازه واقعی آرایه ۸ را مشخص مي نماید. معمولا توایع بگونه ای نوشته من ‎ios‏ که هنگام ارسال یک ارایه به یک ‎ube‏ انداره آن نیز بعنوان یک ‎let‏ آرسال ‎By‏ ‏در هنگام فراخوانی تایع 50۳۱۵۲۲۵۱۷, برای ارسال آرایه موردنظر کافی است که تنها نا ام فراخوا م آرابه را بدون کروشه تفا را رنه مهن ‎void main() {‏ ‎int data1[3] = {5, 10, 15};‏ int data2[5] = {1, 6, 4, 12,5}; int sum1, sum2; sum1 = sumérray(datal, 3); sum2 = sumArray(data2, 5); printf("sum1 = %d\n",sum1); printf("sum2 = %d\n",sum2):

صفحه 20:
۰ زاو آرایه ها را توسط ارجاع به تا ۴-۰ ارسال آرایه های یک بعدی به توابع ‎woe se es‏ ارسال آرايه ها به توايع ات ‎L‏ و ۳ که الک رد هه بای تس اه شود هشال مب شود ۴ ۲ ‎sate veal J Se ai Lal p65. 339 sal‏ کر حقیقت پر فصاهای بعدی خواهیم ‎a‏ که برای ارسال یک آرايم آدرمب اولین کنر آن دتفتزسی ییا اما چرا > در مورد آرایه ها به روش متفاوتی عمل می نماید؟ * دلیل اين مسئله آن است که لا یک آرایه حافظه بسیار زیادی را اشفال می کند؛ لذا یک کبس كردن آذ ‎ural sol‏ باعت اشفال حافظه می شود بلکه زمان زيادی را نیز رو ‎We‏ ‏اما آيا مى توان یک آرایه را توسط مقدار به یک تابع ارسال کرد؟ ‎ *‏ متاسفانه خیر. اما اگر تگران تغیب آرایه ارسالی به یک تابع هستید می توانید آن را بگونه ای به الو وا سوت باه بلس یی یه تفستية مى ‎SES SE‏ بآن © بك نحوه ديكر ارسال داده ها به تون بنام ارسال توسط ارجاع ثايت م ‏نانجه در هنكام تعریف یک پارامتر از یک تابع, از کلمه کلیدی ]05 استفاده شود, اجا مقادیر آن پارا 1 1 ای تا اهد داد. با ارسال را اه ا ل رم ۳

صفحه 21:
: ۴-۱۰۱ ارسال آرایه های یک بعدی به توابة ‎ *‏ مثال 4) برنامه ای بنویسید که با استفاده از یک تابع, اشتراک دو مجموعه را محاسبه و چاپ نماید ‎void intersection(const int Af], int na, const int B[], int nb, int C[J, int &ne) { int .k,j,sw; =0; j<na; i++) { ‎ ‎fC) 5 i<size; i++) printf("%d ",setfi]) ; printf("}\n"); 1 ‎

صفحه 22:
۴-۰ ارسال آرایه های یک بعدی به توابع void main() { int set1[5] = {5, 8, 3, 12, 20}; int set2[3] = {12, 16, 8}; int result(3] , resultsize ; intersection(setl, 5, set2, 3, result, resultSize); printf("set 1 printSet(set1,5) ; printf("set 2 printSet(set2, 3) printf("intersection = "); printSet(result,resultSize) ; 1 setl={5 83 12 20} set2={12 16 8} intersection = { 8 12}

صفحه 23:
۵-۵۰ ارسال آرایه های چندبعدی به توابع در اين قسمت, ابتدا به نجوه ارسال ‎ola al]‏ دوبعدی به توابع مى يردا ‎abl cane‏ هاى با أبعاد بالأثر را بررسي ‎alee‏ ا شابد تصور كنيد كه براى تعريف يك أرايه دوبعدى بعنوان بارامترى ازيك نا تنها فرار دادن دو علاعت [) کاقی است و ‎pigs ome‏ بان 2 * اما متاسفانه اینگوته نیست, بلکه برنا باید تعدار ستونهای آرایه دوبعدی را ‎See oat ol LI. a be‏ رویتهای وهای آرایه کوتجدی زا بعنوان مثال فرض كنيد تايعى مانند 65) داریم که بعنوان ورودی یک آرایع زو بعدى و تعدادى بأرامتر ديكر درياقت مى كند. "تیف نان بصورت زیر اب a ‎void test(int A[][], ...) {‏ تعریف درست. تعریفی مانند زیر است: ‎void test(int A[I[101, ...) {‏ در هنكام فراخوانى تابع :165, مى توان هر آرایه دوعدی 9 ره آن ارسال کرد ۳ ارسالى ان عدر توا لدو تواند

صفحه 24:
۵-۵۰ ارسال آرایه های چندبعدی به توابع * مثال 5) تایعي بنویس ‎aS‏ میزان فروش تعدادي شرکت در 32 ماه سال را بعنوان ورودي د یافت, و فروش شرکتي را که بیشترین میانگین فروش را داشته ‎caus‏ باز" ‎float maxSales(const long int sales[][12], int companyNo) {‏ ‎int i,j;‏ ‎float average , max:‏ max = 0.0; for (i=0 ;i<companyNo; i++) { average = 0; for (j=0; j<12; j++) average += sales[i][j] ; if (average > max) max = average ; return(max);

صفحه 25:
۵-۵۰ ارسال آرایه های چندبعدی به توابع * مثال 6) برنامه ای بنویسید که حاصلضرب دو ماتریس را با استفاده از یک تابع محاسبه نماید. ‎#include <stdio.h>‏ const int maxCol = 10; vold_multipiy(const int AlIimaxCol}, const int B{]imaxCol}, int m.intp, int n, it Cl}tmaxColl ) inti,j,k,sum; for (k=0; k<p; k++) sum += Afil[k] * BIk]G] ; ‎sum;‏ = زا[ 1 ‎void printMatrix(int matrix{][maxCol], int row,int col) {‏ ‎int ‎for ‎ ‎ ‎ ‎row; i++) { for (j=0; j<col ;j++) printf(*96d *,matrix(ilGD): printf("\n"); 0 )

صفحه 26:
۵-۵۰ ارسال آرایه های چندبعدی به توابع void main() { int matrix1[2}[maxCol] = { {7 3,2}, (-2, 6,1} }; int matrix2[3][maxCol] = { {2,7,-4,-1}, (3,-3, 5, -8}, {6,-7, 2,3} }; int result[2}imaxCol] ; multiply(matrix1, matrix2, 2, 3, 4, result); printf("matrix1 is \n"); printMatrix(matrix1,2,3) ; printf("\nmatrix2 is :\n"); printMatrix(matrix2,3,4) ; printf("\nmultiply of matrix and matrix2 is :\n"); printMatrix(result,2,4) ; + matrixd is: 732 261 matrix? Is: 27 4 1 3-35 ‏4ه‎ ‎6723 multiply of matrix] and matrix 2 is 35 26 -9 -25 20 -39 40 -43

صفحه 27:
۵-۵۰ ارسال آرایه های چندبعدی به توابع * اما ارسال آرايه هاي با ابعاد بالاتر به توايع نيز مشابه 0 هاي دوبعدي © به اير ت که در هنگا یف يك پارامتر از تا ان يك آ ۱ أن صورت كد ردن ‎Ne AP Ee‏ بعدی بايد حتما مشخص 5 تفتوان ال هقالع زیر قبت وه ‎void test(int A[][5][10], ...) {‏ * اين تابع يعنوإن ورودي بك آرايه سه بعدي دريافت مي تمايد كه حتما بايد بعد دوم وت و ل

صفحه 28:
۶-۰ برخی عملیات مهم برروی آرایه ها * همانطور که قبلا گفته شد, آرایه ها از ساختمان داده هاي بسیار مهم برنامه نويسي بوده و تقریبا مي توان گفت هیچ برنامه اي وجود ندارد که به نحوي از آرایه ها استفاده نکند. * به همین دلیل براي انجام بعضي از عملیات مهم بر روي آرایه هاء الكوريتمهاي كارا و موثزي توسط محققين ابداع شده است, كه جند نمونه از مهمترين انها را بررسي مي نماييم.

صفحه 29:
۱-۶-۰ الگوریتمهای مرتب سازی ؟ شاید مهمترین عملي که برروي يك ارایه يك بعدي انجام مي شود, مرتب كردن ن بصورت صعودي يا نزولي آست. * بدليل اهمیت ‎lS oul‏ الگوريتمهاي متعددي براي آن ابداع شده است که برخي زان بسیار پیچیده هستند. * در اينجا 3 ۱ پتم ساده د بررسي فته اند که در اش 3 الکو کوج تسیا ده موره بررسي قرار كرفته اند ك ‎Ge‏ رایه هاي بزرگ: بابد از روشهاي پچیده تري استفاده شود که در كتابهاي پیشرفته تر مورد بررسي قرار گرفته اند. 9 در الكوريتمهاي زير قرض شذه ابت كه قعد دار ‎all‏ ‎at)‏ رت صعودي جه با يك تغيير كوجك توآن ان را به نزوا ‎٠‏ تبدي ‎emt ol‏

صفحه 30:
۱-۱-۶-۰ الگوریتم مرتب سازی انتخابی 16 8 8 22 22 12 12 16 22 35 35 35, 27 27 27 8 12 16 41 41 41 19 19 19 مرحله سوم مرحله دوم مرحله اول

صفحه 31:
۱-۱-۶-۰ الگوریتم مرتب سازی انتخابی void selectionSort(int A[], int n) { int i,j; for (i=0; i<n; i++) for (j=i+1; j<n; j++) if (ALi] > ALj]) swap(Alil.ALi)) ;

صفحه 32:
۲-۱-۶-۰ الگوریتم مرتب سازی حبابی 16 16 12 22 12 16 12 22 22 35 27 8 27 8 27 8 35 19 41 19 35 19 11 11 مرحله سوم مرحله دوم مرحله اول

صفحه 33:
+7 ۲۱-۶-۱۰ الگوریتم مرتب سازی حبابی void bubbleSort(int A[], int n) { int i, contSw; do { contSw = 0; ‏م‎ for (i=0; i<n; i++) if (Ali] > Ali+11) { swap(A[i], Ali+1]) : contSw = 1; } } while (contSw) ; }

صفحه 34:
۲-۱-۶-۰ الگوریتم مرتب سازی درجی ؟ در این روش مرتب سازي از عمل درج استفاده مي شود. * اين روش را مي توان بصورت زیر مرحله بندي کرد: * مرطله 71 7 فرض مي کم آرایه فقط داراي عتصر او است و سایر ‎pols‏ را درا شیم در ایتصورت بل ‎epee nated Syl‏ ‎jee‏ سعرضر جوم در زره فرب مره قیل درم من عاسم ‎ig‏ آرایه و ختشری شنت دایم ۳ ۲ > ‏تب‎ mS ۰ ون بك أزايه ند ‎epee‏ مرب ‎ee‏ تا * مرحله ۲ - عنم ام را در آرایه مرتب ۷-1 عنصري مرحله قبل درج مي نماییم تا ارایه ) عنصري مرتب بدست اوریم. * مرحله ۵ - عنصر 0 را در آرایه مرتب مرحله قبل درج کرده تا آرایه مرتب نهايي حاصل شود.

صفحه 35:
۲-۱-۶-۰ الگوریتم مرتب سازی درجی 16 16 12 12 12 8 8 22 22 16 16 16 12 12 12 12 22 22 22 16 16 35 35 35 35 27 22 22 277 27 27 27 35 27 27 8 8 8 8 8 35 35 41 41 41 41 41 41 41 19 19 19 19 19 19 19 مرحله هفتم مرحله ششم . مرحله پنچم ‏ مرطه چهارم ‏ مرطه سوم مره دوم مرحله اول

صفحه 36:
۲-۱-۶-۰ الگوریتم مرتب سازی درجی void insertionSort(int Af], int n) { int i, j, cur; for (i=1; i<n; i++) { cur = Ali]; for (j=i-1; j>=0 && cur<Alj]; j--) Alj+1] = Ali] ; Alj+1] = cur; t }

صفحه 37:
۲-۱-۶-۰ الگوریتم مرتب سازی درجی * در مورد سه الگوریتم مرتب سازی ذکرشده چند نکته قابل ذکر است: * هر 3 الگوریتم برای مرتب سازي یک آرایه از اعداد صحیح (106) شته شده اند. آما روش بهتر آن است که آنها را بصورت یک الگو بنویسیم که قادر به مرتب سازی هر نوع آرایه ای باشند. و نحوه پیاده سازی آنها در فصل گذشته مورد بحث قرار هر 3 الگوریتم برای مرتب سازی بصورت صعودی نوشته شده اند, اما می توان آنها را با یک تفییر کوچک به مرتب سازی نزولی تبدیل کرد. حتی می توان ‎wl‏ را بگونه ای نوشت که یک پارامتر دیگر برای تعیین نوع مرتب سازی نیز بعنوان ورودی دریافت و براساس مقدار آن, مرتب سازی را بصورت صعودی یا نزولی انجام دهد.

صفحه 38:
+ ۲-۶-۱۰ الگوریتمهای جستجو * یکی دیگر از الگوریتمهای بسیار مهم برای آرایه هار الكو ریتمهای جستجو هستند. * موارد زيادى بيش مى آيند كه قصد داريم به دنبال يى داده در یک آرایه جستجو کرده و مکان آن را پیدا کنیم. * در این قسمت دو روش متداول جستجو را مورد بررسی قرار ‎wo‏ دهیم. البته معمولا برای عمل جستجو از ساختمان داده های پیچیده تری همچون درختهای جستجوی دودویی استفاده می گردد, که از بحث ما خارج است.

صفحه 39:
۱-۲-۶-۰ الگوریتم جستجوی خطی جستجوی خطی, ساده ت جستجو است که در آرایه هاق نامرتب ‎eo‏ ‏أسيفاد د مت شود در ای نش دادم سورد نر به مركي بأ نك نک اضر أزاية مقايسه مى شود تا مكان أن بيدا شود. int linearSearch(int A[], int n, int x) { int i; ; isn; i++) Ali]) return(i); if (x return(-1) ; t 0 ‏مقایسه برای بیدا‎ ٩ ‏اگر آرایه دارای 8 باشد, در بدترین حالت نیاز به‎ * ‏کردن داده مورد نظر داریم و این در صورتی است که داده در آخرین مکان‎ ‏آرآیه قرار داشته باشد.‎ * اما از آنجا که احتمال قرار گرفتن داده در هریک از مکانهای آرایه یکسان است. إما إرالط 5ع اجتمال امن درز مس او مکاهای ارانه کات ابیت

صفحه 40:
۲-۲-۶-۰ الگوریتم جستجوی دودویی چنانچه آرایه مورد جستجو مرتب شده باشد. روش بسیار کاراتری برای وجود دار این روش به چستجوی دودویی موسوم آست. با هربر مقایسد. مب آز او آرلیه را از بازه جستجو حذف می نماید. در نتیجه جستجو در یک آرلیه بزرگ با سرعت" سيار زيادف صورت فى يديرت براي تشريح الكوريتم, فرض كنيد آرابه موردنظر بصورت صعودى مرتب شده است. اند عنص وسط ارازه را ‎cols goo SIS‏ توروجست و را با ان مقاینته می کنيم: سه حالت ممکن است رخ دهد" گر داده مورد جستجو با عنصر وسط آرایه مساوی باشد, داده بيدا شده و مكان آن را باز مى ‎ald‏ ‎Pal ۰‏ داده مورد جستجو از عنصر وسط آرایه کوچکتر باشد. بتابراین باید در نیمه اول آرایه به دنبال آن جستجو نماییم. ‏کم داده مورد جستجو از عنصر وسط آرایه بزرگتر باشد, بنابراین باید در نیمه دوم آرایه به دنیال آن جستجو نماییم: چنانچه حالت اول رخ دهد. جستجو پایان یافته و مکان داده بازگردانده می شود. اما اگر حالت دوم با سوم رح دهد. عملیات جستجو به روش فوق مجددا برای نیمه اول با نیمه دوم آرایه تکرار می شود. بدین ترتیب بازه مورد جستجو به نيمى أز أرايه كاهش مي ‏ابد ‏عملیات نا ‎oll wile‏ مى يابة کف با واه مور نظر بيدا شود نويا بازة.موزةاستجو آنقدر کوچک شود که داده ای یاقی نماند (یعنی طول بازه مورد جستجو به صفر برسد), که ور ایتضورت ذانه دز آرایه وجود ندارد:

صفحه 41:
x —+ a9|

صفحه 42:
۲-۲-۶-۰ الگوریتم جستجوی دودویی int binarySearch(int A[], int n, int x) { int low, high, mid; low = 0; high = n-1; while (low <= high) { mid = (low + high) / 2; if (x == A[mid]) return(mid); else if (x < A[mid]) high = mid-1; else low = mid + 1; return(-1); }

صفحه 43:
: ۲-۲-۶-۰ الگوریتم جستجوی دودویی حد حد يا بالا + 11 23 35, 42 53 58 62 71 78 له در دم سا ض يبن بن ات راقص I

صفحه 44:
۲-۲-۶-۰ الگوریتم جستجوی دودویی int recBinarySearch(int A[], int low, int high, int x) { int mid; if (low > high) return(-1); mid = (low + high) / 2; if (x == A[mid]) return(mid); fs, if (x < A[mid]) return(recBinarySearch(A, low, mid- x) else return(recBinarySearch(A, mid+1, high, x)) ; نحوه فراخواني اولیه اين تابع برای جستجوی داده 52 در آرایه 100 عنصري 0812 بصورت است: ‎recBinarySearch(data, 0, 99, 52)‏

صفحه 45:
۲-۲-۶-۰ الگوریتم جستجوی دودویی * براي محاسبه زمان مورد نیاز يك جستجو, باید به اين نکته توجه کرد که با هر مقایسه, بازه جستجو نصف مي شود. * یدترین حالت زماني است که داده اصلا پیدا نشود و پا در آخرین مقایسه (زماني که ننها يك عنصر باقي مانده است) بيدا شود. * سوال اينجاست كه جند بار مي توان اندازه آرايه را نصف كرد تا سرانجام به يك عنصر رسيد؟ log; * بعنوان مثال در يك آرایه با 1.000.000 عنصر, تنها به 20 مقایسه نیاز است. به همین دلیل جستجوي دودويي يكي از بهترین روشهاي جستجو محسوب مي گردد.

صفحه 46:
۳-۶-۰ الگوریتم ادغام ۰ ازا , ادغا مرت تب | ‎Lest‏ آرا سات ادغام دو آرایه مرتب است. ‎plea‏ آرليه ا ۰ مك روش ضیف برای این کار آن است که اند نا أيه ‎ab‏ اب تب ‎rule‏ خواب كيم كليم ‎ea‏ اللو لد شبختانه الگوریتم بهتري وجود دارد که در آن نيازي به مرتب سازي ‎akties‏ هر ۰ طرح كلي اين الگوریتم به شرح زیر است: يك شمارنده براي هريك از دو آرایه در نظر بگیرید و آنها را برابر صفر قرار دهید. رن ‎tte a ee yen‏ زر ین به أن را يك واحد افرایش دهيد. اين مرحله را تا بايان يافئن 0 از دو آرايه ر کنید. gaily L sl sp ‏صر هر‎ * در پایان, تمام عناصر باقیمانده از آرایه ناتمام را به ترتیب به آرایه جواب منتقل بید.

صفحه 47:
۳-۶-۵۰ الگوریتم ادغام 14 17 32 43 49 52 56 64 73 14 43 52 17 32 49 56 64 73

صفحه 48:
5 ۳-۶-۱۰ الگوریتم ادغام void merge(int Al], int na, int BI], int nb, int CU], int &ne) { int i= =0; while (icna && j<nb) { if (AU) < BUD) 1 Ik} = Ali; iets + else if (A[i] > BIj]) { Ctk] = BI]; jets + else { 010 2۸: i; jee: + ‏زجب‎ ‎} ‎for (; i<na; i++, k++) Clk] = Afi]; for (;j<nb; j++, K++) Clk]

جهت مطالعه ادامه متن، فایل را دریافت نمایید.
34,000 تومان