مرتب سازی Radix در سی شارپ

سلام توسعه دهندگان گرامی در این سری از آموزش برنامه نویسی سی شارپ به آموزش مرتب سازی Radix در سی شارپ (Radix Sort) نام دیگر Radix مرتب سازی مبانی یا پایه ای است در واقع Radix براساس کوچک کردن عدد یا رشته به قسمت های کوچکتر عمل مرتب سازی را انجام میدهد در ادامه با ما همراه باشید تا نحوه استفاده از مرتب سازی Radix در سی شارپ را یاد گیرید.
 

مرتب سازی Radix چیست ؟

الگوریتمی است که لیستی با اندازهٔ ثابت و اعضایی با طول k را در زمان (O(kn اتجام می‌دهد. ورودی‌ها را به بخش‌های کوچکی تقسیم می‌کنیم (اگر یک کلمه‌است آن را به حرف‌هایش می‌شکنیم و اگر عدد است آن را به ارقامش) سپس ابتدا لیست را بر اساس کم ارزش‌ترین بیت (حرف یا رقم) مرتب می‌کنیم، سپس بر اساس دومین بیت، تا در نهایت بر اساس پرارزش‌ترین بیت. به این ترتیب پس از k مرحله لیست مرتب می‌شود.
این روش مرتب‌سازی پایدار است و در تهیهٔ واژه‌نامه‌ها و مرتب‌سازی اعداد استفاده می‌شود.
مرتب سازی Radix

در ادامه نحوه پیاده سازی این الگوریتم را در زبان برنامه نویسی سی شارپ (C#) برای شما قرار میدهیم.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication2
{
    class Example
    {
        private int[] data;
        private IList<IList<int>> digits = new List<IList<int>>();
        private int maxLength = 0;
        public Example()
        {
            for (int i = 0; i < 10; i++)
            {
                digits.Add(new List<int>());
            }
            Console.Write("Enter the Number of Records : ");
            int count = int.Parse(Console.ReadLine());
            data = new int[count];
            Console.ReadLine();
            for (int i = 0; i < count; i++)
            {
                Console.Write("Enter Record {0} : ", i + 1);
                data[i] = int.Parse(Console.ReadLine());
                if (maxLength < data[i].ToString().Length)
                    maxLength = data[i].ToString().Length;
            }
        }
        public void RadixSort()
        {
            for (int i = 0; i < maxLength; i++)
            {
                for (int j = 0; j < data.Length; j++)
                {
                    int digit = (int)((data[j] % Math.Pow(10, i + 1)) / Math.Pow(10, i));
                    digits[digit].Add(data[j]);
                }
                int index = 0;
                for (int k = 0; k < digits.Count; k++)
                {
                    IList<int> selDigit = digits[k];
                    for (int l = 0; l < selDigit.Count; l++)
                    {
                        data[index++] = selDigit[l];
                    }
                }
                ClearDigits();
           }
           printSortedData();
        }
        private void ClearDigits()
        {
            for (int k = 0; k < digits.Count; k++)
            {
                digits[k].Clear();
            }
        }
        public void printSortedData()
        {
            Console.WriteLine("The Sorted Numbers are : ");
            for (int i = 0; i < data.Length; i++)
            {
                Console.WriteLine(data[i]);
            }
        }
        static void Main(string[] args)
        {
            new Example().RadixSort();
            Console.ReadLine();
        }
    }
}

از کد بالا هم در Console و هم در Windows Form می توانید استفاده کنید.
خروجی کد بالا

Enter the  Number of Records : 5
Enter Record 1 : 54
Enter Record 2 : 53
Enter Record 3 : 15
Enter Record 4 : 27
Enter Record 5 : 75
The Sorted Numbers are :
15
27
53
54
75

البته خروجی کد بالا بسته به ورودی شما دارد.
 
موفق و موید باشید.

مطالعه بیشتر