鍊錶插入排序

2021-10-22 12:48:02 字數 1253 閱讀 8175

題目描述:

對鍊錶進行插入排序。

插入排序演算法:

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

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

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

解題思路:

1.首先判斷給定的鍊錶是否為空,若為空,則不需要進行排序,直接返回。

2.建立啞節點 dummyhead,令 dummyhead.next = head。引入啞節點是為了便於在 head 節點之前插入節點。

3.維護 lastsorted 為鍊錶的已排序部分的最後乙個節點,初始時 lastsorted = head。

4.維護 cur 為待插入的元素,初始時 cur= head.next。

5.比較 lastsorted 和 cur 的節點值。

(1) 若 lastsorted.val <= curr.val,說明 cur 應該位於 lastsorted 之後,將 lastsorted 後移一位,cur 變成新的 lastsorted。

(2) 否則,從鍊錶的頭節點開始往後遍歷鍊錶中的節點,尋找插入 cur 的位置。令 prev 為插入 cur的位置的前乙個節點,進行如下操作,完成對 cur 的插入:

lastsorted.next = curr.next

curr.next = prev.next

prev.next = curr

6.令 cur = lastsorted>next,此時 cur為下乙個待插入的元素。

7.重複第 5 步和第 6 步,直到 cur 變成空,排序結束。

8.返回 dummyhead->next,為排序後的鍊錶的頭節點。

實現**:

class solution

listnode* dummyhead=new listnode(0);

dummyhead->next=head;

listnode* lastsorted=head;

listnode*cur=head->next;

while(cur!=null)

else

lastsorted->next=cur->next;

cur->next=prev->next;

prev->next=cur;

}cur=lastsorted->next;

}return dummyhead->next;

}

鍊錶插入排序

void insertsort list sortascount,node node else p prior next q q next p int sortwithinsetmethod list sortasdata wchar pp p data if isnum pp int i 0 i ...

鍊錶插入排序

題目 用插入排序對鍊錶排序 樣例 given1 3 2 0 null,return0 1 2 3 null 思路 新建乙個以dummy開頭的鍊錶,並將dummy賦初值為0。令node dummy,通過移動新煉表中的node與要排序的鍊錶中的head,並比較node與head的值,來實現排序。如果he...

鍊錶插入排序

題目 用插入排序對鍊錶排序 思路 建立乙個新的鍊錶,將目標鍊錶依次插入先煉表中,小就插到前面,大就插到後面,如此一來,新的鍊錶就是目標鍊錶按大小次序排列的了。先看第一步,將目標鍊錶的第乙個元素插入所建立的空鍊錶,具體是先建立乙個地值存下頭節點的下乙個節點的位置,將頭節點的next變為空,連到一開始建...