用于链接列表的合并排序的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);
在评论中写代码?请使用 ide.geeksforgeeks.org,生成链接并在此处分享链接。