Сортировка естественным слиянием на массиве - C#
Формулировка задачи:
Здравствуйте, необходимо реализовать сортировку естественным слиянием на массиве, находил алгоритмы на других языках, пробовал переписать, но они не работают, как можно реализовать данное задание? или может есть у кого то алгоритм?
Код алгоритма. В целом он работает, но есть небольшие ошибки. В конце есть неотсортированная часть, как будто не хватает еще одного слияния с двух массивов в один. Как можно исправить данный недочет?
public void Natural(List<int> sequence) //Естественное слияние { if(sequence.Count<=1) return; int start = 0; int stop1 = getNextStop(start, sequence); int stop2; for (; stop1 < sequence.Count - 1;stop1++) { stop2 = getNextStop(stop1 + 1, sequence); MergeForNatural(sequence, start, stop1, stop2); stop1 = stop2; } } private void MergeForNatural(List<int> sequence, int start, int stop1, int stop2) { List<int> temp = new List<int>(); List<int> tem = new List<int>(); for (int k = start; k <= stop1; k++) temp.Add(sequence[k]); int i = start; int j = stop1 + 1; for (int k = start; k <= stop2; k++) { if (i > stop1) break; else if (j > stop2) { sequence[k] = temp[i]; i++; } else if (temp[i] > sequence[j]) { sequence[k] = sequence[j]; j++; } else { sequence[k] = temp[i]; i++; } tem.Add(sequence[k]); } } private int getNextStop(int i, List<int> sequence ) { for (;i < sequence.Count - 1 && sequence[i] < sequence[i + 1];) i++; return i; }
Решение задачи: «Сортировка естественным слиянием на массиве»
textual
Листинг программы
namespace HeavyMath.Sorters { public enum SortOrderTypes { Direct = 1, Indirect = -1 } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д