Сортировка естественным слиянием на массиве - 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
}
}