對鍊錶進行插入排序。
插入排序演算法:
插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。
每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。
重複直到所有輸入資料插入完為止。
示例 1:
輸入: 4->2->1->3
輸出: 1->2->3->4
示例 2:
輸入: -1->5->3->4->0
輸出: -1->0->3->4->5
新建虛擬頭節點dummy,並指向頭節點head。新建乙個指標pre,指向虛擬頭節點。(我們要想交換節點的順序就需要持有那個節點前面的引用)
以head為指標,向後移動,如果head的下乙個節點比head節點的值大,那麼就繼續移動,如果小的話,我們就要把head的下乙個節點插入排序到前面。
移動pre指標,知道pre指標的下乙個節點比head的下乙個節點大,那麼就需要交換pre的下乙個節點和head的下乙個節點。
pre指標重新指向虛擬頭節點。
最壞情況的時間複雜度為o(n^2)。
class solution
pre = dummy;
while (pre.next.val <= head.next.val)
/* 交換位置 */
對鍊錶進行插入排序
1.問題描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次...
對鍊錶進行插入排序
描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,...
對鍊錶進行插入排序
題目 示例 1 輸入 4 2 1 3 輸出 1 2 3 4 示例 2 輸入 1 5 3 4 0 輸出 1 0 3 4 5 解題思路 需要維護幾個引用來記錄當前已排序的和正在排序的節點,當找到大於當前要排序的節點值後進行插入操作 definition for singly linked list.pu...