C# - Bubble Sort Algorithm

Posted by ေတဇာလင္း Friday 30 December 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ားအားလံုး မဂၤလာပါဗ်ာ။ ဒီေန႔ေတာ့ က်ေနာ္တို႔ VS C# ကို အသံုးျပဳၿပီး Sorting Algorithms ေတြထဲက တစ္ခုျဖစ္တဲ့ Bubble Sort အေၾကာင္းေလးကို ေလ့လာၾကည့္ၾကပါ့မရ္ဗ်။ အေပၚကပံုကေတာ့ Bubble Sort Algorithm အလုပ္ လုပ္သြားတဲ့ ပံုစံပဲျဖစ္ပါတရ္။ အေပၚပံုမွာျမင္ရတဲ့အတိုင္း ကိန္းစဥ္တန္း ငါးလံုးရွိရင္ Loop Step ငါးခုရွိမွာျဖစ္ပါတရ္။ Step တစ္ခုစီတိုင္းမွာ ကပ္လွ်ပ္ ကိန္းစဥ္တန္းႏွစ္လံုးကို ႏႈိင္းယွဥ္ၿပီး ငယ္စဥ္ႀကီးလိုက္အတြက္ ေနာက္ကိန္းကငယ္ေနလွ်င္ေရွ႕ကိန္းနဲ႔ေနရာခ်ိန္းပါတရ္။ ေနာက္ကိန္းကႀကီးေနရင္ေတာ့ ဒီအတိုင္းပဲ ျပန္စီပါတရ္ဗ်။ ဒီနည္းအတုိင္းပဲ ကိန္းစဥ္တန္းဆံုးတဲ့အထိ ကပ္လွ်ပ္ႏွစ္လံုးစီ ႏႈိင္းယွဥ္ၿပီး ေနရာအခ်ိန္းအေျပာင္းလုပ္ပါတရ္။ Step တစ္ခုဆံုးတဲ့အခ်ိန္မွာ ကိန္းစဥ္တန္းရဲ႕ ေနာက္ဆံုးကို ေရာက္သြားတဲ့ ကိန္းဟာ အႀကီးဆံုးကိန္း ျဖစ္ေနမွာပါ။ ဒါေၾကာင့္ Step 1 ၿပီးတဲ့အခ်ိန္မွာ ေနာက္ဆံုး ကိန္းဟာ အႀကီးဆံုးကိန္း၊ Step 2 ဆံုးတဲ့အခါ ေနာက္ဆံုး ကိန္းႏွစ္လံုးဟာ Sort လုပ္ၿပီးသား အႀကီးဆံုးကိန္းျဖစ္ေနမွာပါ။ ဒီနည္းအတိုင္း ကိန္းစဥ္တန္းအားလံုး Sort လုပ္ၿပီးသည္အထိ Step သြားၿပီး Loop လုပ္ ႏႈိင္းယွဥ္ပါတရ္ဗ်ာ။ အေပၚက ပံုကို ၾကည့္လုိက္ရင္ေတာ့ က်ေနာ္ ဘာကို ဆိုလိုေနတရ္ဆုိတာကို နားလည္ႏိုင္ၾက လိမ့္မရ္လို႔ ထင္ပါတရ္။
ဒါကေတာ့ က်ေနာ္ရဲ႕ ေလ့လာၾကည့္မဲ့ Bubble Sort အတြက္ GUI ပါ။ DataGridView ထဲကို Array Set လုပ္တာကိုေတာ့ ေရွ႕က Insertion Sort သင္ခန္းစာမွာ ရွင္းျပခဲ့ၿပီးျဖစ္လို႔ မရွင္းေတာ့ပါဘူးဗ်ာ။ private void txtSetColumn_TextChanged(object sender, EventArgs e){ ...} မွာ Coding ေလး ၾကည့္လိုက္ပါ။
ေနာက္တစ္ခုကေတာ့ Bubble Sort ကို က်ေနာ္ Method ခြဲေရးထားတဲ့ ပံုစံပါ။ public int[] BubbleSorted(int[] arr, string Opt){...} မွာ Coding ေလး ေလ့လာၾကည့္ပါအံုးဗ်။
Method ကို Calling လုပ္တဲ့ ပံုစံကိုေတာ့ private void btnBubbleSort_Click(object sender, EventArgs e) {...} မွာေ လ့လာႏိုင္ပါတရ္။
Result ပံုေလးနဲ႔ Bubble Sort ရဲ႕ အလုပ္ လုပ္ပံုေလးကို သိၿပီဆိုရင္ေတာ့ က်ေနာ္တို႔ ပိုၿပီး နားလည္သြားေအာင္ ေအာက္မွာ Coding အျပည့္အစံုေလးကို ေလ့လာၾကည့္ၾကမရ္ဗ်ာ။
using System;
using System.Windows.Forms;
namespace BubbleSort
{
    public partial class frmBubbleSort : Form
    {
        public frmBubbleSort()
        {
            InitializeComponent();
        }

        private void txtSetColumn_TextChanged(object sender, EventArgs e)
        {
            if (txtSetColumn.Text != "") {
                //For Row of UnSorted-DataGridView
                dgvUnSort.RowTemplate.Height = 35;
                dgvUnSort.RowCount = 1;
                dgvUnSort.RowHeadersVisible = false;
                //For Column of UnSorted-DataGridView
                dgvUnSort.ColumnCount = int.Parse(txtSetColumn.Text);
                dgvUnSort.AllowUserToResizeColumns = true;
                dgvUnSort.ColumnHeadersVisible = false;
                for (int i = 0; i < dgvUnSort.ColumnCount; i++) {
                    dgvUnSort.Columns[i].Width = 35;
                }

                //For Row of Sorted-DataGridView
                dgvSort.RowTemplate.Height = 35;
                dgvSort.RowCount = 1;
                dgvSort.RowHeadersVisible = false;
                //For Column of Sorted-DataGridView
                dgvSort.ColumnCount = int.Parse(txtSetColumn.Text);
                dgvSort.AllowUserToResizeColumns = true;
                dgvSort.ColumnHeadersVisible = false;
                for (int i = 0; i < dgvSort.ColumnCount; i++) {
                    dgvSort.Columns[i].Width = 35;
                }
            } else {
                dgvUnSort.Rows.Clear();
                dgvSort.Rows.Clear();
            }
        }

        private void btnBubbleSort_Click(object sender, EventArgs e)
        {
            //Set Default Sorting Option
            if (cbSortOption.SelectedIndex == -1) {
                cbSortOption.Text = "ASC";
            }
            //Load Data to Array[] from DataDridView
            int length = dgvUnSort.ColumnCount;
            int[] UnSortedArr = new int[length];
            for (int i = 0; i < length; i++) {
                UnSortedArr[i] = int.Parse(dgvUnSort.Rows[0].Cells[i].Value.ToString());
            }
            //Call BubbleSort Method
            int[] SortedResult = BubbleSorted(UnSortedArr, cbSortOption.Text);
            //Add Sorted Data to DataGridView
            for (int i = 0; i < SortedResult.Length; i++) {
                dgvSort.Rows[0].Cells[i].Value = SortedResult[i];
            }
        }

        public int[] BubbleSorted(int[] arr, string Opt)
        {
            int length = arr.Length;
            switch (Opt)
            {
                case "ASC" :
                    for (int i = 0; i < length; i++) {
                        for (int j = 0; j < length-1 - i ; j++) {
                            if (arr[j] > arr[j+1]) {
                                int key = arr[j];
                                arr[j] = arr[j + 1];
                                arr[j + 1] = key;
                            }
                        }
                    }
                    return arr;

                case "DESC":
                    for (int i = 0; i < length; i++) {
                        for (int j = 0; j < length - 1 - i; j++) {
                            if (arr[j] < arr[j + 1]) {
                                int key = arr[j];
                                arr[j] = arr[j + 1];
                                arr[j + 1] = key;
                            }
                        }
                    }
                    return arr;

                default:
                    return null;
            }           
        }
    }
}

နားလည္ႏိုင္ၾကလိမ့္မရ္လို႔ ေမ်ာ္လင့္ပါတရ္ဗ်။ မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမအားလံုး ေလ့လာျခင္းျဖင့္ ေက်နပ္ႏိုင္ၾကပါေစ။

0 Responses so far.

Post a Comment