кодесурса
«C #

Упражнения по алгоритму поиска и сортировки C # Sharp: Radix sort

script1adsense2code
script1adsense3code

Алгоритм поиска и сортировки C # Sharp: упражнение 10 с решением

Напишите программу на C # Sharp для сортировки списка элементов, используя алгоритм сортировки Radix.

Radix sort - это не сравнительный алгоритм целочисленной сортировки, который сортирует данные по целочисленным ключам путем группировки ключей по отдельным цифрам, которые имеют одинаковые значимые позиции и значения.

Пример :

Оригинал, несортированный список: 272, 45, 75, 81, 501, 2, 24, 66

Сортировка по младшей цифре (1-е место) дает:

27 2 , 8 1, 50 1 , 2 , 2 4, 4 5, 7 5, 6 6

Здесь мы держим 501 перед 2, потому что 501 произошло до 2 в исходном списке, и аналогично для пар 272 и 81 и 45 и 75.

Сортировка по следующей цифре (10-е место) дает:

501, 2, 2 4, 4 5, 6 6, 272, 7 5, 9

Обратите внимание, что 501 снова идет перед 2, так как 501 идет перед 2 в предыдущем списке.

Сортировка по наиболее значимой цифре (место 100) дает:

2, 24, 45, 66, 75, 81, 2 72, 5 01

Важно понимать, что для каждого из вышеперечисленных этапов требуется всего один проход данных, поскольку каждый элемент может быть помещен в свое правильное ведро без необходимости сравнения с другими элементами.

Некоторые реализации радикальной сортировки выделяют пространство для сегментов, сначала подсчитывая количество ключей, принадлежащих каждому блоку, прежде чем перемещать ключи в эти сегменты. Количество раз, которое встречается каждая цифра, сохраняется в массиве. Рассмотрим предыдущий список ключей, рассматриваемых по-другому:

272, 045, 075, 081, 002, 024, 501, 066

Первый проход отсчета начинается с наименее значащей цифры каждого ключа, создавая массив размеров сегмента:

  • 2 (размер ведра для цифр 0: 272, 081)
  • 2 (размер ведра для цифр 2: 002, 501)
  • 1 (размер ведра для цифр 4: 024)
  • 2 (размер ведра для цифр 5: 045, 075)
  • 1 (размер ведра для цифр 6: 066)

Второй проход подсчета следующей более значимой цифры каждого ключа даст массив размеров сегментов:

  • 2 (размер корзины для цифр 0: 002, 501)
  • 1 (размер ведра для цифр 2: 024)
  • 1 (размер ведра для цифр 4: 045)
  • 1 (размер ведра для цифр 6: 066)
  • 2 (размер ведра для цифр 7: 272, 075)
  • 1 (размер ведра для цифр 9: 081

Третий и последний проход подсчета самой значимой цифры каждого ключа даст массив размеров сегментов:

  • 6 (размер блока для цифр 0: 002, 024, 045, 066, 075, 081)
  • 1 (размер ведра для цифр 1: 272)
  • 1 (размер ведра для цифр 8: 501)

Пример решения : -

C # острый код:

using System;
 namespace Radix_Sort
{
    class Program
    {
        static void Sort(int[] arr)
        {
            int i, j;
            int[] tmp = new int[arr.Length];
            for (int shift = 31; shift > -1; --shift)
            {
                j = 0;
                for (i = 0; i < arr.Length; ++i)
                {
                    bool move = (arr[i] << shift) >= 0;
                    if (shift == 0 ? !move : move)   
                        arr[i-j] = arr[i];
                    else                             
                        tmp[j++] = arr[i];
                }
                Array.Copy(tmp, 0, arr, arr.Length-j, j);
            }
        }
        static void Main(string[] args)
        {
            
			int[] arr = new int[] { 2, 5, -4, 11, 0, 18, 22, 67, 51, 6  };
			Console.WriteLine("\nOriginal array : ");
			foreach (var item in arr)
            {
                Console.Write(" " + item);    
            }
            Sort(arr);
			Console.WriteLine("\nSorted array : ");
			foreach (var item in arr)
            {
                Console.Write(" " + item);    
            }
           Console.WriteLine("\n");
        }
    }
}

Пример вывода:

 Исходный массив:                                                                                              
 2 5 -4 11 0 18 22 67 51 6                                                                                    
Сортированный массив:                                                                                                
 -4 0 2 5 6 11 18 22 51 67 

Блок - схема:

«C #

Редактор кода C # Sharp:

Внесите свой код и комментарии через Disqus.

Предыдущий: Написать программу на C # Sharp для сортировки списка элементов с помощью быстрой сортировки
Далее: Напишите программу на C # Sharp для сортировки списка элементов с использованием алгоритма сортировки выбора.

Каков уровень сложности этого упражнения?

Новый контент: Composer: менеджер зависимостей для PHP , R программирования


script1adsense4code
script1adsense5code
disqus2code
script1adsense6code
script1adsense7code
script1adsense8code
buysellads2code