資料結構 使用歸併排序對鍊錶進行排序

2022-06-12 14:57:11 字數 1163 閱讀 2244

首先我們要看一道題 對於我們解題很重要

while迴圈是固定的。

這道題沒毛病看到都知道用雙指標,但是快慢結點的初始賦值是怎麼樣的呢。

(1)奇數項 fast=head

沒毛病 3是中點。

(2)偶數項 fast=head(要求slow為中點的兩個的第二個)

符合條件。

來看歸併排序鍊錶

如果我們還用剛才的fast=head會發生2個元素無法分開的情況

會出現上圖的情況。右鍊錶一直空,左鍊錶一直遞迴下去 棧溢位。

所以,我們根據題意 ,slow不應該和876題一樣 要最中間的結點,應該要876中點的前乙個結點。所以fast=head.next

我們來看乙個奇數項的完整版

接下來就是進行遞迴拆分了。

寫上面的理由就是:不要發生 無法分解為1個結點的情況(比如剛才2結點無法分 棧溢位)

對鍊錶進行排序(歸併排序)

首先用快慢指標的方法找到鍊錶中間節點,然後遞迴的對兩個子鍊錶排序,把兩個排好序的子鍊錶合併成一條有序的鍊錶。歸併排序應該算是鍊錶排序最佳的選擇了 保證了最好和最壞時間複雜度都是nlogn,而且它在陣列排序中廣受詬病的空間複雜度在鍊錶排序中也從o n 降到了o 1 class solution fas...

資料結構之鍊錶歸併排序

問題 設有兩個無頭結點的單鏈表,頭指標分別為ha,hb,鏈中有資料域data,鏈域next,兩鍊錶的資料都按遞增排序存放,現要求將hb表歸到ha表中,且歸併後ha仍遞增序,歸併中ha表中已有的資料若hb中也有,則hb中的資料不歸併到ha中,hb的鍊錶在演算法中不允許破壞。源程式 include in...

資料結構 歸併排序

排序 sort 或分類 內部排序方法可以分為五類 插入排序 選擇排序 交換排序 歸併排序和分配排序。歸併排序 include using namespace std 歸併排序中的合併演算法 void merge int a,int left,int center,int len int t int ...