鍊錶的歸併主要有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...