C# - Insertion Sort Algorithm

Posted by ေတဇာလင္း Thursday, 29 December 2016 0 comments

မိတ္ေဆြ၊ ညီအစ္ကို၊ ေမာင္ႏွမမ်ားအားလံုး မဂၤလာပါဗ်ာ။ က်ေနာ္တို႔ ဒီေန႔ေတာ့ VS C# ကို အသံုးျပဳၿပီး Sorting Algorithms ေတြထဲက တစ္ခုျဖစ္တဲ့ Insertion Sort အေၾကာင္းေလးကို Coding ေလးေရးၿပီး ေလ့လာၾကည့္ၾကပါမရ္။
အေပၚက ပံုကေတာ့ Insertion Sort အလုပ္ လုပ္သြားတဲ့ ပံုစံပါ။ က်ေနာ့္ Website ေလးျဖစ္တဲ့ programmingknowledge.blogspot.com မွာ Insertion Sort အေၾကာင္းကို သီအုိရီနဲ႔ႏြယ္ၿပီး အနည္းငရ္ ရွင္းျပခဲ့ၿပီးပါၿပီ။ မိတ္ေဆြတို႔ ေလ့လာႏိုင္ပါတရ္ဗ်။ ဒါေၾကာင့္ ဒီေန႔ ေလ့က်င့္ခန္းမွာ က်ေနာ္ အေသးစိတ္မရွင္းေတာ့ပဲ Code Flow ေလးနဲ႔ Screen Shoot ေလးေတြပဲ ျပပါ့မရ္ဗ်။ Coding Flow ကိုေတာ့ ေလ့လာၾကည့္မရ္ဆိုရင္ေတာ့ အဆင့္(၄)ဆင့္နဲ႔ ေတြ႔ရမွာပါ။ အဆင့္(၁)။ မိမိႏွစ္သက္ရာ Columns အေရအတြက္ကို သက္မွတ္ၿပီး DataGridView မွာ Array[ ] အတြက္ Table တစ္ခု တည္ေဆာက္ယူမွာျဖစ္ပါတရ္။ အဆင့္(၂)။ ဖန္တီးထားေသာ UnSorted Table မွာ မိမိႏွစ္သက္ရာ Array[ ] အတြက္ ကိန္းစဥ္တန္းတစ္ခုကို ရိုက္ထည့္ပါ့မရ္။ အဆင့္(၃)။ ဒီအဆင့္မွာေတာ့ Sorting Option ကို ေရြးခ်ယ္ၿပီး Insertion Sort Btn ကိုႏွိပ္ကာ Sorting လုပ္ေဆာင္ယူမွာျဖစ္ပါတရ္။ အဆင့္(၄)။ ဒါဆိုရင္ေတာ့ က်ေနာ္တို႔ ေျပာင္းလဲယူလိုက္တဲ့ Sorting လုပ္ၿပီးသား Array[] တစ္ခုကို Sorted DataGridView မွာျမင္ရမွာျဖစ္ပါတရ္ဗ်ာ။ ဒီေလ့က်င့္ခန္းမွာ Sorting ကို သီးသန္႔ Method ခြဲၿပီး ေရးထားပါတရ္။ ဒီမွာ မိတ္ေဆြတို႔ တစ္ခု သတိထားရမွာေတာ့ က်ေနာ္တို႔ ဖန္တီးထားတဲ့ Sorting Method က Array[] ကို Parameter Passing လုပ္ထားၿပီး Array[] ကိုပဲ return ျပန္ထားတဲ့အတြက္ေၾကာင့္ Sorting Method ကို ေခၚမသံုးခင္ မိမိ Sort လုပ္ခ်င္ေသာ ကိန္းစဥ္တန္းကို Array[] တစ္ခုအျဖစ္ အရင္ ဖန္တီးယူရမွာျဖစ္ပါတရ္ဗ်။ public int[] InsertSort(int[] arr, string Opt){ ... } ဒါက Insertion Sort ရဲ႕ Method ပါ။ int[] SortedArr = InsertSort(Array, "ASC/DESC"); ဒါကေတာ့ Calling ပံုစံပါ။
Coding အျပည့္အစံုေလးကို ေအာက္မွာ ၾကည့္လိုက္ပါအံုးဗ်ာ။
using System;
using System.Windows.Forms;
namespace InsertionSort
{
    public partial class frmInsertionSort : Form
    {
        public frmInsertionSort()
        {
            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 btnInsertionSort_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 InsertionSort Method
            int[] SortedResult = InsertSort(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[] InsertSort(int[] arr, string Opt) {
            int key, j;
            switch (Opt)
            {                
                case "ASC" :                    
                    for (int i = 1; i < arr.Length; i++){
                        key = arr[i];
                        j = i - 1;
                        while (key < arr[j]  &&  j >= 0){
                            arr[j+1] = arr[j];
                            j = j-1;
                            if (j < 0)
                                break;
                        }
                        arr[j+1] = key;
                    }
                    return arr;

                case "DESC" :                   
                    for (int i = 1; i < arr.Length; i++){
                        key = arr[i];
                        j = i - 1;
                        while (key > arr[j] && j <= arr.Length)
                        {
                            arr[j+1] = arr[j];
                            j = j-1;
                            if (j < 0)
                                break;
                        }
                        arr[j+1] = key;
                    }
                    return arr;

                default :
                    return null;
            }            
        }
     }
}

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

0 Responses so far.

Post a Comment