166 對鍊錶進行插入排序

2021-10-18 17:20:23 字數 1192 閱讀 7751

題目如下:

對一條鍊錶進行排序演算法,要求使用演算法為插入排序,且時間複雜度符合o(n^2)

解題方法:

1、判斷鍊錶是否為空,為空直接返回

2、新建排序煉表頭和尾都指向head: shead=head;stail=head;

3、將鍊錶分為左右兩部分,左邊為乙個結點:頭結點head,右邊為剩餘結點

4、從鍊錶第二位開始插入排序(cur=head->next)標記右部分的第乙個結點,if(cur!=null)

listnode *s = cur->next;//給cur的next做標記

5、cur不為空進入while迴圈

(1)判斷cur->val是否小於排序鍊錶頭部值shead->val;

如果小於,更新排序鍊錶頭部cur->next = shead; shead = cur;

(2)否則判斷curr->val是否大於等於排序鍊錶尾部值stail->val;

如果大於等於,更新排序鍊錶尾部stail->next = cur; stail = cur;

(3)否則落入排序鍊錶中間:

找到排序鍊錶位置p,使得p->val<=cur->val< p ->next->val;將cur插入到p和p->next中間

cur->next = p->next; p->next = cur;

更新cur,cur=s;s=s->next;

6、鍊錶問題記得斷尾求生

stail->next = nullptr;

7、返回排序鍊錶

return shead;

listnode *

insertionsortlist

(listnode *head)

else

if(cur->val >= stail->val)

else

p = p->next;}}

cur = s;

if(s!=

null

) s=s->next;

} stail->next =

null

;return shead;

}

**執行如下:

對鍊錶進行插入排序

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

對鍊錶進行插入排序

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

對鍊錶進行插入排序

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