Heapsort (метод кучи, пирамидальная сортировка) для строк - C#

Узнай цену своей работы

Формулировка задачи:

Доброго всем времени суток, может ли кто-то поделиться опытом сортировки по алфавиту методом heapsort? Есть массив array с названиями, которые нужно отсортировать, знаю как применять алгоритм к числам, а как ко строкам?
Как переделать данный алгоритм для строк?
Листинг программы
  1. public static void heapify(int[] arr, int pos, int size)
  2. {
  3. int temp;
  4. while (2 * pos + 1 < size)
  5. {
  6. int t = 2 * pos + 1;
  7. if (2 * pos + 2 < size && arr[2 * pos + 2] >= arr[t])
  8. {
  9. t = 2 * pos + 2;
  10. }
  11. if (arr[pos] < arr[t])
  12. {
  13. temp = arr[pos];
  14. arr[pos] = arr[t];
  15. arr[t] = temp;
  16. pos = t;
  17. }
  18. else break;
  19. }
  20. }
  21. public static void heap_make(int[] arr, int n)
  22. {
  23. for (int i = n - 1; i >= 0; i--)
  24. {
  25. heapify(arr, i, n);
  26. }
  27. }
  28. public static void heap_sort(int[] arr, int n)
  29. {
  30. int temp;
  31. heap_make(arr, n);
  32. while (n > 0)
  33. {
  34. temp = arr[0];
  35. arr[0] = arr[n - 1];
  36. arr[n - 1] = temp;
  37. n--;
  38. heapify(arr, 0, n);
  39. }
  40. }

Решение задачи: «Heapsort (метод кучи, пирамидальная сортировка) для строк»

textual
Листинг программы
  1. internal static class HeapSort
  2.     {
  3.         internal static void Sort<T>(T[] array, int offset, int length, Comparison<T> comparison)
  4.         {
  5.             if (array == null)
  6.                 throw new ArgumentNullException("array");
  7.             if (offset < 0 || length < 0)
  8.                 throw new ArgumentOutOfRangeException((length < 0 ? "length" : "offset"), "Non-negative number required.");
  9.             if (array.Length - offset < length)
  10.                 throw new ArgumentException("Offset and length were out of bounds for the array or count is greater than the number of elements from index to the end of the source collection.");
  11.             if (comparison == null)
  12.                 throw new ArgumentNullException("comparison");
  13.             for (var i = 0; i < length; i++)
  14.             {
  15.                 var index = i;
  16.                 var item = array[offset + i];
  17.                 while (index > 0 && comparison(array[offset + (index - 1) / 2], item) < 0)
  18.                 {
  19.                     var top = (index - 1) / 2;
  20.                     array[offset + index] = array[offset + top];
  21.                     index = top;
  22.                 }
  23.                 array[offset + index] = item;
  24.             }
  25.             for (var i = length - 1; i > 0; i--)
  26.             {
  27.                 var last = array[offset + i];
  28.                 array[offset + i] = array[offset];
  29.                 var index = 0;
  30.                 while (index * 2 + 1 < i)
  31.                 {
  32.                     int left = index * 2 + 1, right = left + 1;
  33.                     if (right < i && comparison(array[offset + left], array[offset + right]) < 0)
  34.                     {
  35.                         if (comparison(last, array[offset + right]) > 0)
  36.                             break;
  37.                         array[offset + index] = array[offset + right];
  38.                         index = right;
  39.                     }
  40.                     else
  41.                     {
  42.                         if (comparison(last, array[offset + left]) > 0)
  43.                             break;
  44.                         array[offset + index] = array[offset + left];
  45.                         index = left;
  46.                     }
  47.                 }
  48.                 array[offset + index] = last;
  49.             }
  50.         }
  51.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы