📌  相关文章
📜  用于链接列表的合并排序的Java程序

📅  最后修改于: 2022-05-13 01:58:09.327000             🧑  作者: Mango

用于链接列表的合并排序的Java程序

合并排序通常是对链表进行排序的首选。链表的缓慢随机访问性能使得其他一些算法(如快速排序)表现不佳,而其他算法(如堆排序)则完全不可能。
排序图像

令 head 为要排序的链表的第一个节点, headRef 为指向 head 的指针。请注意,我们需要在 MergeSort() 中引用 head,因为下面的实现会更改下一个链接以对链表(不是节点处的数据)进行排序,因此如果原始 head 处的数据不是最小值,则必须更改头节点在链表中。

MergeSort(headRef)
1) If head is NULL or there is only one element in the Linked List 
    then return.
2) Else divide the linked list into two halves.  
      FrontBackSplit(head, &a, &b); /* a and b are two halves */
3) Sort the two halves a and b.
      MergeSort(a);
      MergeSort(b);
4) Merge the sorted a and b (using SortedMerge() discussed here) 
   and update the head pointer using headRef.
     *headRef = SortedMerge(a, b);