Stand 排序

Strand排序(Strand Sort)

Strand排序不斷地從待排序的序列中拉出排好序的子列表,並歸併成一個最終的結果。該算法的平均和最壞時間複雜度都達到了O(n2),最好時間複雜度爲O(n)。Strand排序高效的條件要求:

  • 以鏈表(linked list)方式存放的數據排序起來最爲有效,因爲它需要反覆添加和移除元素,而鏈表添加移除元素的代價很小;
  • 原始數據中已經很大程度上有序了,這樣每次可以儘量多地拉出一個有序子列表數據。

舉例來說,現在有原始列表(4,5,2,3,1):

  • 遍歷元素,第一個元素4,拉出包含4的最長遞增子序列:(4,5),原列表變成了(2,3,1);
  • 繼續拉出最長遞增子序列(2,3),和前面拉出的序列歸併得到(2,3,4,5),原列表變成了 (1);
  • 拉出(1),歸併得到(1,2,3,4,5)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章