Я делаю проект, в котором мне нужно распараллелить некоторые алгоритмы сортировки и сравнить параллельные результаты с последовательными. Я пытаюсь распараллелить сортировку вставки, используя цикл Parallel.For, но он работает неправильно. Первая часть массива отсортирована отлично, а другая часть начинает снова сортировать массив по неверному индексу.
Parallel.For(1, myarray.Length, x =>
{
int cur = myarray[x];
int j = x;
while (j > 0 && cur < myarray[j - 1])
{
myarray[j] = myarray[j - 1];
j--;
}
myarray[j] = cur;
}
Часть моего результата для 500 случайных элементов из [0-1000], где существует ошибка:
...... 992 992 995 997 224 225 228 228 231 233 234 235 237 ......
Это все еще 500 элементов, но часть из них перенесена в конец.
Так что это работает, но какой-то поток пытается отсортировать его снова по некоторому индексу, я думаю. Как я могу это исправить?