مرتب سازی حبابی با آرایه ها
می توان گفت مرتب سازی از ضروریات برنامه نویسی است. فرض کنید دفترچه تلفنی دارید که حاوی 1000 رکورد است. حال اگر این دفترچه تلفن بر اساس نام خانوادگی افراد مرتب نباشد، پیدا کردن شخص مورد نظر در این لیست کار بسیار سختی است. از این رو در این مقاله به کمک روش حبابی، مرتب سازی اعداد در آرایه ها را به شما آموزش می دهیم.
1- برنامه ای بنویسید که تعدادی عدد را از ورودی خوانده، آن ها را به روش حبابی مرتب می کند و نتیجه را در خروجی چاپ می کند.
#include <iostream> using namespace std; void bubble_in(int [], int); void bubble_sort(int [], int); void bubble_out(int [], int); int main() { int n; cout<<"Enter a number for n :"; cin>>n; int bubble[n]; bubble_in(bubble, n); bubble_sort(bubble, n); bubble_out(bubble, n); return 0; } void bubble_in(int bubble[], int n) { for(int i=0; i<n; i++) { cout<<"Enter a number : "; cin>>bubble[i]; } } void bubble_sort(int bubble[], int n) { int item; for(int i=0; i<n-1; i++) for(int j=0; j<n-i-1; j++) if(bubble[j] > bubble[j+1]) { item = bubble[j]; bubble[j] = bubble[j+1]; bubble[j+1] = item; } } void bubble_out(int bubble[], int n) { cout<<"sorted array : "; for(int i=0; i<n; i++) cout<<bubble[i]<<" "; }
این برنامه شامل 3 تابع می باشد. وقتی در بدنه اصلی برنامه تابع buuble_in صدا زده می شود، این تابع فراخوانی می گردد و اعداد را از ورودی می گیرد و در آرایه bubble قرار می دهد.
void bubble_in(int bubble[], int n) { for(int i=0; i<n; i++) { cout<<"Enter a number : "; cin>>bubble[i]; } }
دومین دستور فراخوانی در تابع ()main، تابع bubble_sort را صدا می زند. این تابع آرایه را به روش حبابی مرتب می کند.
void bubble_sort(int bubble[], int n) { int item; for(int i=0; i<n-1; i++) for(int j=0; j<n-i-1; j++) if(bubble[j] > bubble[j+1]) { item = bubble[j]; bubble[j] = bubble[j+1]; bubble[j+1] = item; } }
به عنوان مثال، فرض کنید آرایه int bubble[5] = {50, 25, 5, 20, 10}
را به تابع bubble_sort ارسال و به روش حبابی مرتب می کنیم. در گام اول (i = 0)، در حلقه داخلی j از 0 تا 4 مقدار می گیرد که به ازای j = 4 شرط حلقه غلط و کار حلقه داخلی تمام می شود. به کمک دستور تصمیم if(bubble[j] > bubble[j+1])
هر دو خانه مجاور آرایه با هم مقایسه می شود و اگر مقدار خانه سمت چپ bubble[j]
از مقدار خانه سمت راست آرایه bubble[j+1]
بیشتر باشد، مقدار این دو خانه به کمک یک متغیر کمکی به نام item جا به جا می شود. مطابق تصویر پایین مشاهده می کنید که بعد از 4 مقایسه، عدد 50 به عنوان بزرگترین مقدار به سمت راست آرایه هدایت می شود.
در گام دوم (i = 1)، در حلقه داخلی j مقدار 0 تا 3 را می گیرد و شرط حلقه به ازای 3 = j غلط و برنامه به حلقه بیرونی بر می گردد. به طور مشابه، بعد از 3 مقایسه عدد 25 به عنوان بزرگترین مقدار به سمت راست آرایه هدایت می شود و قبل از 50 قرار می گیرد.
در گام سوم (i = 2)، در حلقه داخلی j مقدار 0 تا 2 را می گیرد و شرط حلقه به ازای 2 = j غلط و برنامه به حلقه بیرونی بر می گردد. به طور مشابه، بعد از 2 مقایسه عدد 20 به عنوان بزرگترین مقدار به سمت راست آرایه هدایت می شود و قبل 25 قرار می گیرد.
در گام چهارم (i = 3)، در حلقه داخلی j مقدار 0 تا 1 را می گیرد و شرط حلقه به ازای 1 = j غلط و برنامه به حلقه بیرونی بر می گردد. به طور مشابه، بعد از 1 مقایسه عدد 10 به عنوان بزرگترین مقدار به سمت راست آرایه هدایت می شود و قبل 20 قرار می گیرد.
در گام پنجم (i = 4) شرط حلقه بیرونی غلط و کار برنامه به اتمام می رسد.
سومین دستور فراخوانی در تابع ()main، تابع bubble_sort را فراخوانی و این تابع، آرایه مرتب شده bubble را در خروجی چاپ می کند.
void bubble_out(int bubble[], int n) { cout<<"sorted array : "; for(int i=0; i<n; i++) cout<<bubble[i]<<" "; }
برای مشاهده فهرست آموزش برنامه نویسی در ++C کلیک کنید.
دیدگاهتان را بنویسید