«Параллельная сортировка с использованием Parallel.For работает неправильно» - PullRequest
0 голосов
/ 15 мая 2019

Я делаю проект, в котором мне нужно распараллелить некоторые алгоритмы сортировки и сравнить параллельные результаты с последовательными. Я пытаюсь распараллелить сортировку вставки, используя цикл 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 элементов, но часть из них перенесена в конец. Так что это работает, но какой-то поток пытается отсортировать его снова по некоторому индексу, я думаю. Как я могу это исправить?

...