鍊錶的歸併排序

2021-09-24 13:59:57 字數 1096 閱讀 3409

鍊錶的歸併主要有2種方法。

自頂向下的遞迴法自底向上的非遞迴法

在討論具體的歸併排序前,必須清楚以下幾個問題!

public link find_mid(link head)			

return slow; // 慢指標所指 即為鍊錶中點

}

public linknode merge(linknode a,linknode b)

else

temp = temp.next;

} if(a == null)

temp.next = b;

if(b == null)

temp.next = a;

return oldtemp.next;

}

public linknode merge(linknode a,linknode b)

else

}

public linknode merge_k(linknode a,linknode b,linknode c)  // 這裡用3個有序鍊錶為例			

return res;

}

public link sort(link head)

public link sort(link head)

counter[i] = cur; // 如果該位置沒有節點, 直接放入。

if(i > maxindex)

maxindex = i; // 儲存此時的i。 即最後被占用的位置下標

} // 當鍊表的節點都被拿完:

link res = null; // 這裡用到了歸併 k 個 鍊錶 的 操作

for(int i = 0; i <= maxindex; i++)

return res;

}

鍊錶歸併排序

include include include include include using namespace std typedef int type typedef struct nodetag node node build type a,int n pnode pnext null retu...

鍊錶歸併排序

主要思路 1 如果為null或者只有乙個節點那麼直接返回 2 將鍊錶分成兩部分,分別進行排序,形成兩個有序鍊錶 3 將兩個有序鍊錶合併 void merge sort struct node list void split struct node head,struct node lista,str...

鍊錶 歸併排序

時間複雜度o nlogn 空間複雜度o 1 include include 定義鍊錶 typedef struct listnode linklist linklist head null 建立鍊錶 linklist createlist int arr,int len rear next null...