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)。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章