將第乙個元素看作乙個有序序列
將後面的元素按公升降次序插入有序序列,一直重複直到整個序列有序
用帶有頭節點的列表 list 方便運算
因為公升序和降序只有判斷方法不一樣,所以可以設定乙個mode變數表示排序方式
建立乙個新的鍊錶 list_sorted 存放有序序列,按反序放置,此時有序數列的最後乙個元素就是此鍊錶的第乙個元素
取出乙個未排序的元素,找到相應的位置並插入,重複4直到所有結點有序
再按照反序把 list_sorted 中的元素插入 list中,即可得到最後結果
測試**// 判斷
int sort_judgewithmode(int num1, int num2, int mode)
// 鍊錶插入排序
/*mode: 非0:公升序, 0:降序
*/void sort_straightinsertionsort_list(snode* slist, int mode)
slist_sorted_tmp = slist_sorted_tmp_next;}}
// 將有序鍊錶反序插回
while(slist_sorted->next)
}
運算結果#define n 11
int main()
; snode* slist = createlist(arr,n);
printsnodes(slist,"%d ", "\n");
printf("降序:");
sort_straightinsertionsort_list(slist, 0);
printsnodes(slist,"%d ", "\n");
printf("公升序:");
sort_straightinsertionsort_list(slist, 1);
printsnodes(slist,"%d ", "\n");
return 0;
}
鍊錶插入排序
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變為空,連到一開始建...