鍊錶插入排序

2021-10-10 03:35:05 字數 1077 閱讀 7468

將第乙個元素看作乙個有序序列

將後面的元素按公升降次序插入有序序列,一直重複直到整個序列有序

用帶有頭節點的列表 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變為空,連到一開始建...