leetcode147 對鍊錶進行插入排序

2021-10-05 14:22:37 字數 1584 閱讀 3892

對鍊錶進行插入排序。

插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序(用黑色表示)。

每次迭代時,從輸入資料中移除乙個元素(用紅色表示),並原地將其插入到已排好序的鍊錶中。

插入排序演算法

插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。

每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。

重複直到所有輸入資料插入完為止。

假設某個節點之前的部分都是排好序的。要確定當前節點的位置,只需要從前向後遍歷一遍鍊錶,找到插入節點即可。

**一:

該方法中,假設head永遠是有序鍊錶的尾部,因此每次只看head的下乙個節點。如果下乙個節點與head是有序的,則head向後移動乙個。如果是亂序的,則從前向後遍歷有序部分找到插入點。

class

solution

listnode * dummy =

newlistnode(0

),*tmp =

nullptr

; dummy-

>next = head;

while

(head && head-

>next)

tmp = dummy;

while

(tmp-

>next-

>val < head-

>next-

>val)

tmp = tmp-

>next;

listnode * curnode = head-

>next;

head-

>next = curnode-

>next;

curnode-

>next = tmp-

>next;

tmp-

>next = curnode;

}return dummy-

>next;}}

;

**二:

該方法是通過small和large找到當前節點應該插入的位置,如果不在這個範圍為,small和large向後移動一位繼續找。如果large==curnode,表明全部是有序的,繼續判斷下乙個。如果laege!=curnode,則將當前節點插入small和large中間。

class

solution

listnode* dummy =

newlistnode

(int_min)

; dummy-

>next = head;

listnode* curnode = head-

>next;

while

(curnode)

else}if

(large == curnode)

large-

>next = nxtnode;

else

curnode = nxtnode;

}return dummy-

>next;}}

;

Leetcode 147 對鍊錶進行排序

對鍊錶進行插入排序。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。示例 1 輸入 4 2 1 3 輸出 1 2 3 4 到了鍊...

LeetCode 147 對鍊錶進行插入排序

插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。方法1 嚴格按照演算法說明,在原始列表中進行操作,利用4個鍊錶指標分別表示當前元...

LeetCode147 對鍊錶進行插入排序

對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排...