我編寫了代碼來並行執行雙向選擇排序。我使用了c#和parallel.invoke函數。並行調用2個循環,一個尋找最小值,一個尋找最大值。然而,它不排序。我想知道是這個問題,因爲這種類型的處理不能並行處理,因爲每個循環都依賴於另一個循環中存在的數據嗎?或者是我的代碼有什麼問題嗎?並行雙向選擇排序
Parallel.Invoke(
() =>
{
for (int i=0; i < array.Length/2; i++)
{
int m;
int min = i;
for (m = i + 1; m < array.Length - 1; m++)
if (array[m] < array[min])
min = m;
//swap
int temp = array[min];
array[min] = array[m];
array[m] = temp;
}
},
() =>
{
for (int m = 0; m < array.Length/2; m++)
{
int length = array.Length - 1;
int max = length - m;
int k;
for (k = length--; k > 0; k--)
if (array[k] > array[max])
max = k;
//swap
int temp = array[max];
array[max] = array[k];
array[k] = temp;
}
});
我試過使用這段代碼,它並沒有將我的數組一直排序。我用你的單線程代碼。 – user1799092
編輯我的代碼和解釋。 ;) – ultddave
它的工作......謝謝! – user1799092