排序演算法 鍊錶實現

2021-07-04 10:21:20 字數 385 閱讀 7665

陣列的高效體現於隨機訪問,插排、快排等排序演算法未用到這一特點,

故這兩種排序演算法可基於鍊錶實現

插入排序:

迭代器 p順序訪問鍊錶

迭代器 i順序訪問前 p 個元素

主要的操作為 當p>i&& p.value刪除原位置的 p將p插入 i-1 與 i 之間

若為單向鍊錶,儲存 i-1與 p-1

演算法複雜度為比較的次數o(n^2),減少了移動陣列導致的開銷

快排:迭代過程 傳遞各鍊錶的首尾位址,需額外傳遞分割點的前驅節點

劃分過程維護小於劃分點的字首,順序訪問陣列

具體演算法實現過程有大量的節點刪除、插入操作,並且需要及時儲存節點的前驅與後繼

很多自過程在leecode中有對應的題,如劃分鍊錶等。

鍊錶排序演算法

1 題目 對亂序的鍊錶進行排序,要求空間複雜度為常數。leetcode 148 中等 輸入 4 2 1 3 輸出 1 2 3 4 輸入 1 5 3 4 0 輸出 1 0 3 4 5 2 思路 對於這題我有兩種解法,一種是時間複雜度o n2 對於暴力解法,我們會將整個鍊錶分為 有序段 和 無序段 兩段...

演算法 鍊錶排序

sort a linked list in o n log n time using constant space complexity.example 1 example 2 歸併排序 首先將鍊錶從中部切分為兩個部分,不斷遞迴這個過程 遞迴回溯的時候將兩個鍊錶歸併為有序鍊錶 public list...

排序演算法和鍊錶

void swap int a,int b 2.加法 void swap int a,int b 3.異或 相同為0,不同為1.可以理解為不進製加法 void swap int a,int b 2 求最大公約數。1.直接遍曆法 int maxcommondivisor int a,int b ret...