2013-01-16 46 views
1

我有幾個線程與他們正在處理的對象的隊列,而另一個線程從各種輸入讀取和創建這些對象。某些對象必須由特定的線程處理,其他對象可以由任何空閒線程處理(因此不需要爲所有線程使用一個隊列),但我仍想保持負載合理平衡。我有一個包含所有線程使用的所有ConcurrentQueues的數組,並且我想根據它們的數量對它們進行排序。由於大部分時間隊列將被排序,因此Insertion Sort在這裏表現不錯。我是否正確實施了此插入排序?

(編輯:對於那些問,我寫我自己,因爲根據http://msdn.microsoft.com/en-us/library/6tf1f0bc(v=vs.100).aspx「此方法使用快速排序算法,」我想插入排序)

我用http://en.literateprograms.org/Insertion_sort_(Visual_Basic_.NET)給我一個手,但我並不相信自己。這看起來是否正確?

 Dim i As Integer = 0 

     While (i < MaxThreads) 

      Dim j As Integer = i - 1 
      Dim v As Concurrent.BlockingCollection(Of BufferEntry) = ThreadQueues(i) 

      While (j > -1) 
       If (ThreadQueues(j).Count <= v.Count) Then Exit While 
       ThreadQueues(j + i) = ThreadQueues(j) 

       j -= 1 
      End While 

      ThreadQueues(j + 1) = v 

      i += 1 
     End While 
+1

你爲什麼要編寫自己的排序?不要那樣做,使用Array.Sort() –

+0

@HansPassant因爲根據MSDN,Array.Sort使用QuickSort。我想要插入排序 – cost

+0

@HansPassant它在哪裏說它使用Introsort,因爲它肯定在Array.Sort MSDN頁面上說Quicksort – cost

回答

2

整體而言,這看起來很不錯,但我認爲這條線

ThreadQueues(j + i) = ThreadQueues(j) 

應該

ThreadQueues(j + 1) = ThreadQueues(j) 
+0

啊,謝謝你的支持! – cost