مرتب سازی آرایه ها…….
کاربرد مرتب سازی آرایه ها…
برای جستجو در آرایه ها ، به دست آوردن کمترین و بیشترین مقدار عددی در یک آرایه و …. از مرتب سازی استفاده میشود..
این قسمت ما فعلا با مرتب سازی حبابی کار میکنیم.
نحوه مرتب سازی به روش مرتب سازی
در این روش دو حلقه For….Next برای مرتب سازی تعریف میشود ..
حلقه اول یا حلقه بیرونی برای شمارش تعداد عناصر آرایه و حلقه دوم یا
حلقه درونی برای مقایسه یک عنصر با تمامی عنصر های بعدی آرایه تعریف میشود.
متداولترین روش مرتب سازی روش مرتب سازی حبابی ست که در این حالت:
یک مقدار با مقداری بعدی خود یا (a & a+1) مقایسه میشود.
اگر عنصر a از عنصر a+1 بزرگتر بود در این حالت ، یک متغیر کمکی ، عنصر a
را در خود جای داده و مقدار عنصر a+1 در سلول a قرار میگیرد و در نهایت
مقدار قبلی عنصر a که قبلا در متغیر کمکی قرار گرفته بود، مقدار خود را در
سلول a+1 قرار میدهد.
به مثال زیر توجه کنید.
یک پروژه Windows Application ایجاد کنید و دو ListBox و یک کنترل Button به آن اضافه نمایید….
در ابتدای فرم و در داخل کلاس اصلی ، آرایه زیر را به ابتدای فرم اصلی و در قسمت جنرال اضافه کنید
Private array(20) AsInteger
پس از درج آرایه بالا زیر تابع های زیر را بعد از کد بالا نیز اضافه نمایید.
PrivateSub Fill_Arrays()
Dim rand AsNewRandom
For i AsInteger = 0 To UBound(array)
array(i) = rand.Next(0, 100)
ListBox1.Items.Add(array(i))
Next
EndSub
PrivateSub Bubble_Sort(ByVal ar() AsInteger, ByVal len AsInteger)
Dim i, j AsInteger, temp AsInteger
For i = len – 1 To 0 Step -1
For j = 0 To len – 1
If ar(j) > ar(j + 1) Then
temp = ar(j)
ar(j) = ar(j + 1)
ar(j + 1) = temp
EndIf
Next
Next
EndSub
PrivateSub View_Sorted_Arrays()
For i AsInteger = 0 To UBound(array)
ListBox2.Items.Add(array(i))
Next
EndSub
————
پس از اضافه نمودن زیر توابع بالا در روال Click کنترل Button کد زیر را نیز به آن اضافه نمایید.
Fill_Arrays()
Bubble_Sort(array, 20)
View_Sorted_Arrays()
———-
حال برنامه را اجرا و بر روی Button کلیک کنید..
مشاهده میکنید که تعداد 20 عدد تصادفی ساخته و ابتدا در آرایه و سپس در کنترل listBox قرار گرفته است
در قسمت بعدی آرایه مرتب شده و در نهایت از طریق زیر تابع سوم در listBox دوم قرار میگیرد.
———–
برنامه چگونه کار میکند؟؟؟
1: زیر تابع Fill_Arrays
در این زیر تابع با استفاده از حلقه For …Next ابتدا شروع به شمارش اندیس اول یا صفرم تا اندیس آخر آرایه که با استفاده از تابع UBound موجود در Vb به دست می آید میکند
همانطور که مشاهده میکنید قبل از حلقه For کلاس Random یا
کلاس ایجاد اعداد تصدفی تعریف شده است و در داخل حلقه در هنگام شمارش
متغیر i ، شماره سلول مقدار i برابر با یک عدد تصادفی تولید شده بین عدد 0
تا 100 میشود.
2: زیر تابع Bubble_Sort
این تابع 2 ورودی دارد که ورودی اول همان آرایه و ورودی دوم آن طول آرایه میباشد
در ابتدا 3 متغیر که 2 متغیر آن برای شمارش و 1 متغیر کمکی برای نگه داری مقدار در حال مقایسه آرایه تعریف شده است..
حلقه i برای شمارش تعداد عناطر آرایه از انتها به ابتدا
با گام منفی 1 ، و حلقه j برای مقایسه کردن مقدار اندیس ذخیره شده در متغیر
i با مقدار بعدی خود یعنی j+1 با گام 1 تعریف شده است
در خط بعدی با شرط بزرگتر بودن مقدار j از j+1 مقدار موجود در سلول j در متغیر temp قرار میگیرد
سپس در خط بعدی سلول j+1 مقدار خود را به سلول j میدهد.
و در انتهای آن متغیر temp که مقدار اولیه j را در خود نگه داری کرده بود در سلول j+1 قرار میگیرد.
این شرط ها ، مقایسه و جابجایی مقادیر تا زمانی ادامه
پیدا میکند که مقدار متغیر شمارشی i به عدد 0 و مقدار متغیر شمارشی j به
آخرین اندیس از آرایه برسد …..
3: زیر تابع View_Sorted_Arrays
در
این زیر تابع با استفاده از مقدار شمارشی و قرار گرفتن مقدار i به جای
اندیس آرایه ، تمامیه عناصر مرتب شده در کنترل listBox 2 قرار میگیرد
————————
در
فراخوانی توابع ابتدا اعداد تصادفی ایجاد شده و در آرایه قرار میگیرد سپس
تابع مرتب سازی 2 ورودی دریافت میکند که ورودی اول آن نام آرایه ای که
قرار است مرتب شود و ورودی دوم طول آرایه میباشد…
———–
نکته : این روش مرتب سازی ، مرتب سازی آرایه ها به صورت صعودی میباشد
برای مرتب ساری به روش نزولی کافیست علامت بزرگتر بودن در شرط j > j+1 را به j < j+1 تغییر دهید..
آرایه چیست؟؟؟؟؟
آرایه ها خانه هایی از حافظه هستن که در کنار هم قرار گرفته اند و میتوانند مقادیری در هر سلول را نگهداری کنند ..
نکته : آرایه ها میتونن ۱ ، ۲ و یا چند بعدی باشن … اما ما فعلا فقط با آرایه های ۱ بعدی کار میکنیم.
خب یعنی چی؟؟؟؟
میخوام اینو با یه مثال ساده براتون توضیح بدم .. به شکل زیر توجه کنید
میشه گفت آرایه یه شکل شبیه شکل بالاست..
یعنی ما میتونیم تو این خانه و یا سلول ها هر نوع مقداری با توجه به تعریف نوع آرایه قرار بدیم….
حالا کاربرد آرایه کجاست؟؟؟؟؟؟
زمانی ما از آرایه ها استفاده میکنیم که بخواهیم بیش از چند متغیر تعریف کنیم
مثلا ممکنه بخوایم ۱۰ عدد رو به طور جداگانه داخل متغیر بریزیم
اما اگه بخوایم برای هر عدد یک متغیر تعریف کنیم ، اول از همه طولانی و زمان بر میشه و هم مدیریت اون مشکل …
برای همین از آرایه ها کمک میگیریم.
نحوه دسترسی به سلول آرایه ها چگونه است؟؟؟
خب !!! باید بگم که هر سلول از آرایه یه شماره آدرس داره که اصطلاحا به اون میگن اندیس یا ایندکس آرایه….
اگه به شکل زیر دقت کنید میبینید که زیر هر سلول یک شماره وجود داره.. که اندیس یا شماره آدرس هر سلول رو نشون میده.
دقت داشته باشید که اندیس هر آرایه از عدد ۰ شروع میشه و اندیس آخرین خانه از آرایه برابر میشه با طول آرایه منهای ۱
میبینید هر سلول از آرایه یه مقدار عددی رو توی خودش جا داده….
در ابتدای تعریف آرایه ها هم گفتم که نوع مقدار آرایه ها رو ما در تعریف آرایه مشخص میکنیم.
مثلا به جای مقدار عددی ، میتونیم از مقدار رشته ای و یا هر نوع مقدار حتی شی در آرایه قرار بدیم..
——————————
نحوه تعریف آرایه:
برای تعریف آرایه مانند زیر عمل میکنیم.
خب حالا میخوام براتون قسمت های مختلف این کد رو توضیح بدم..
تعریف آرایه شبیه به تعریف یک متغیره …. و از قوانین خاص تعریف متغیر
تبعیت میکنه…. تعریف آرایه فقط یه فرق کوچیک با تعریف متغیر داره و اون
مشخص کردن طول آرایه ست…..
اما اینجا همه قسمت های اونو براتون توضیع میدم…
۱: Array_name = شما میتوندید تو این قسمت از کد هر نامی رو به دلخواه برای آرایه با توجه به قوانین نام گذاری آرایه قرار بدین…
2:len = قسمت len یه عدد رو میگیره که مشخص کننده طول آرایه ست…
3:DataType = تو این قسمت از کدنویسی هم شما نوع مقدار آرایه رو مشخص میکنید…
به مثال زیر توجه کنید:
Dim a(8) AsInteger
با این مثال نحوه تعریف آرایه رو شما یادگرفتید.
با استفاده از این کد ما یه آرایه 8 عنصری ساختیم که شامل 8 خونست و میتونه اعداد صحیح از نوع Integer رو تو خودش نگه داری کنه…..