鍊錶的插入排序

2021-07-05 02:06:47 字數 1100 閱讀 3201

/*

*************************=

功能:直接插入排序(由小到大)

返回:指向煉表表 頭的指標

*************************=

*//*

直接插入排序的基本思想就是假設鍊錶的前面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變為空,連到一開始建...