排序專題 -- (1)插入排序
(1)簡單插入排序以順序表作為儲存結構
void InsertSort(int a[], int n)
{
for(int i = 1; i < n; ++i)
{
if(a[i] < a[i-1])
{
temp = a[i];
for(int j = i; a[j] > temp && j > 0; --j)
{
a[j] = a[j-1];
}
a[j] = temp;
}
}
}
(2)以連結串列作為儲存結構【leetcode 147】
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode(int x) : val(x), next(NULL) {}
* };
*/
class Solution
{
public:
ListNode* insertionSortList(ListNode* head)
{
if(head == nullptr || head->next == nullptr)
return head;
// 創立一個啞節點,引入啞節點是為了便於在 head 節點之前插入節點
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
// 指標p表示插入排序之前已經有序部分的最大值(即最後一個節點)
// q表示無序的第一個, 需要新加入排序的節點
ListNode* p = head, *q = p->next;
while(q != nullptr)
{
if(p->val <= q->val)
p = p->next;
else
{
ListNode* pre = dummyHead;
// 插在pre之後的位置
while(pre->next->val <= q->val)
pre = pre->next;
// 把當前q插入到pre後
p->next = q->next;
q->next = pre->next;
pre->next = q;
}
q = p->next; // 新節點的位置在已經排序完成之後的一個位置
}
return dummyHead->next;
}
};
相關文章
- 排序(1)--插入排序和交換排序排序
- 三種插入排序 直接插入排序,折半插入排序,希爾排序排序
- 插入排序排序排序
- 插入排序(java機試題)排序Java
- rust-algorithms:1-插入排序RustGo排序
- [java]插入排序及折半插入排序Java排序
- 排序之插入排序排序
- 插入排序排序
- 03 插入排序排序
- 選擇排序和插入排序排序
- 排序演算法——插入排序排序演算法
- 桶排序 選擇,插入排序排序
- 【排序】插入類排序—(折半)插入排序、希爾排序排序
- C語言例題19:折半插入排序C語言排序
- python插入排序Python排序
- 數的插入排序排序
- 插入排序(PHP,C)排序PHP
- 如何理解插入排序?排序
- php插入排序,快速排序,歸併排序,堆排序PHP排序
- 排序演算法__折半插入排序排序演算法
- 查詢與排序04,插入排序排序
- 氣泡排序 插入排序 快排排序
- (一)氣泡排序、選擇排序、插入排序排序
- 排序演算法 - 快速插入排序和希爾排序排序演算法
- PHP 排序演算法之插入排序PHP排序演算法
- 排序演算法之折半插入排序排序演算法
- 圖解選擇排序與插入排序圖解排序
- 連結串列-插入排序排序
- 插入排序以及優化排序優化
- 插入排序(Insertion Sort)排序
- 插入排序-by-Python排序Python
- 直接插入排序排序
- JavaScript實現:插入排序!!!JavaScript排序
- 【演算法】插入排序演算法排序
- 【筆記】折半插入排序筆記排序
- 【筆記】表插入排序筆記排序
- 插入排序java實現排序Java
- php實現 氣泡排序,插入排序,選擇排序PHP排序