題目如下:
對一條鍊錶進行排序演算法,要求使用演算法為插入排序,且時間複雜度符合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 示例 ...
對鍊錶進行插入排序
描述 對鍊錶進行插入排序。插入排序的動畫演示如上。從第乙個元素開始,該鍊錶可以被認為已經部分排序 用黑色表示 每次迭代時,從輸入資料中移除乙個元素 用紅色表示 並原地將其插入到已排好序的鍊錶中。插入排序演算法 插入排序是迭代的,每次只移動乙個元素,直到所有元素可以形成乙個有序的輸出列表。每次迭代中,...