using System;
namespace MergeSort
{
class Program
{
static int[] vektor = { 5, 7, 8, 9, 1, 2, 23, 4 };
static int[] delVektor;
static int counter = 0;
static void Main(string[] args)
{
PrintVektor(vektor);
Merge(0, vektor.Length - 1);
Console.WriteLine("--------");
PrintVektor(vektor);
Console.ReadKey();
}
static void PrintVektor(int[] vektor)
{
foreach (var item in vektor)
{
Console.WriteLine(item.ToString() + " ");
}
}
static void Merge(int start, int stop)
{
if (start >= stop)
return;
int middle = (start + stop)/2;
Merge(start, middle);
Merge(middle + 1, stop);
delVektor = new int[stop - start + 1];
int indexStart = start;
int indexStop = middle + 1;
while (indexStart <= middle && indexStop <= stop)
{
if (vektor[indexStart] < vektor[indexStop])
{
delVektor[counter] = vektor[indexStart];
indexStart++;
counter++;
}
else
{
delVektor[counter] = vektor[indexStop];
indexStop++;
counter++;
}
}
while (indexStart <= middle)
{
delVektor[counter] = vektor[indexStart];
indexStart++;
counter++;
}
while (middle <= stop)
{
delVektor[counter] = vektor[indexStop]; // <---- here i get index out of range
indexStop++;
counter++;
}
for (int i = 0; i <= delVektor.Length - 1; i++)
{
vektor[start + i] = delVektor[i];
}
}
}
}
Вещь я получаю индекс из исключения диапазона (я прокомментировал в коде),Проблемы с моим слиянием Алгоритм C#
while (middle <= stop) {
delVektor[counter] = vektor[indexStop]; // <---- here i get index out of range
indexStop++; counter++;
}
Я не могу понять это
я не знаю, что я делаю неправильно. Я так долго смотрел на этот код, что просто хочу выкинуть компьютер из окна, как только попытаюсь его исправить.
MergeSort обычно разбит на два метода: 'mergesort' и' merge'. Кажется, вы объединили их в один метод, который выглядит запутанным. Взгляните на страницу википедии: http://en.wikipedia.org/wiki/Merge_sort, у нее есть хорошая информация. Также я предполагаю, что вы бесконечно рекурсивно. –
Если этот вопрос задается домашним заданием, отметьте его как таковой. –
что не работает? то, что было результатом и чего вы ожидали –