/*
*************************=
功能:直接插入排序(由小到大)
返回:指向煉表表 頭的指標
*************************=
*//*
直接插入排序的基本思想就是假設鍊錶的前面n-1個節點是已經按鍵值
(就是用它排序的字段,我們取學號num為鍵值)排好序的,對於節點n在
這個序列中找插入位置,使得n插入後新序列仍然有序。按照這種思想,依次
對鍊錶從頭到尾執行一遍,就可以使無序鍊錶變為有序鍊錶。
單向鍊錶的直接插入排序圖示:
---->[1]---->[3]----> [2]...---->[n]---->[null](原鍊錶)
head 1->next 3->next 2->next n->next
---->[1]---->[null](從原煉表中取第1個節點作為只有乙個節點的有序鍊錶)
head
圖11---->[3]---->[2]...---->[n]---->[null](原鍊錶剩下用於直接插入排序的節點)
first 3->next 2->next n->next
圖12---->[1]---->[2]---->[3]...---->[n]---->[null](排序後鍊錶)
head 1->next 2->next 3->next n->next
圖13:有n個節點的鍊錶直接插入排序
1、先在原煉表中以第乙個節點為乙個有序鍊錶,其餘節點為待定節點。
2、從圖12鍊錶中取節點,到圖11鍊錶中定位插入。
3、上面圖示雖說畫了兩條鍊錶,其實只有一條鍊錶。在排序中,實質只增加了乙個用於指向剩下需要排序節點的頭指標first罷了。
這一點請讀者務必搞清楚,要不然就可能認為它和上面的選擇排序法一樣了。
*/node *insertsort(node *head)
else /*p是q的前驅*/
t->next = q; /*完成插入動作*/
/*first = first->next;*/
}return head;
}
鍊錶插入排序
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變為空,連到一開始建...