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

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


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

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

6   голосов , оценка 4 из 5
Похожие ответы