LeetCode147 對鍊錶進行插入排序

2021-09-24 21:03:59 字數 965 閱讀 8606

對鍊錶進行插入排序。

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

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

插入排序演算法:

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

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

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

示例 1:

輸入: 4->2->1->3

輸出: 1->2->3->4

示例 2:

輸入: -1->5->3->4->0

輸出: -1->0->3->4->5

先說乙個概念,有序區,我們總是認為當前需要插入的節點,在其之前的節點都是有序的,這些節點組成有序區。

一開始,有序區中僅有乙個節點,就是頭結點。

我們設定乙個哨兵(虛擬節點),將其下一節點指向頭結點,如此一來,可以大大方便我們對鍊錶的操作。

在向量(陣列)中的插入 排序都是從後往前比較,這裡由於鍊錶的單向性,我們只能選擇從前往後進行比較,找到第乙個大於該節點的節點。

c++**:

class solution 

// 指向下乙個需要插入的節點

p_next = p->next;

// 如果p不是有序區中最大的節點,p的前置節點不需要移動,只要改變其next即可

if (p != q) // 此時p為有序區中最大的數,因此p的前置節點往後移動

Leetcode 147 對鍊錶進行排序

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

LeetCode 147 對鍊錶進行插入排序

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

leetcode 147 對鍊錶進行插入排序

對鍊錶進行插入排序 插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,插入排序只從輸入資料中移除乙個待排序的元素,找到它在序列中適當的位置,並將其插入。重複直到所有輸入資料插入完為止。思路 鍊錶的插入排序,不能像陣列類的插入排序,由後往前找,所...