链表排序算法总结

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

这个星期做数据结构课设,涉及到两个基于链表的排序算法,分别是基于链表的选择排序算法和归并排序算法。写出来跟大家一起分享一下,希望对数据结构初学朋友有所帮助,高手就直接忽视它吧。话不多说,下面就看代码吧。

[c-sharp]view plaincopy

1.node *sorted(node *sub_root)

2.{

3.if (sub_root->next)

4. {

5. node * second_half = NULL;

6. node * first_half = sub_root;

7. node * temp = sub_root->next->next;

8.while (temp)

9. {

10. first_half = first_half->next;

11. temp = temp->next;

12.if(temp)

13. temp = temp->next;

14. }

15. second_half = first_half->next;

16. first_half->next = NULL;

17. node * lChild = sorted(sub_root);

18. node * rChild = sorted(second_half);

19.if (lChild->data < rChild->data)

20. {

21. sub_root = temp = lChild;

22. lChild = lChild->next;

23. }

24.else

25. {

26. sub_root = temp = rChild;

27. rChild = rChild->next;

28. }

29.while (lChild&&rChild)

30. {

31.if (lChild->data < rChild->data )

32. {

33. temp->next = lChild;

34. temp = temp->next;

35. lChild = lChild->next;

36. }

37.else

38. {

39. temp->next = rChild;

40. temp = temp->next;

41. rChild = rChild->next;

42. }

43. }

44.if (lChild)

45. temp->next = lChild;

46.else

47. temp->next = rChild;

48. }

49.return sub_root;

50.

51.}

上面贴出来的就是归并排序的算法,刚开始写的时候,由于考虑不够周到,出现许多错误,经过调式之后,才能运行成功。在这里,我想借用我朋友说过的一句话,程序是通告调出来的,希望还没学会调式的刚接触编程语言的朋友,尽快学会调式程序。

基于链表的排序,我认为归并排序的效率最高。归并排序思路简单,但是在实现的过程中涉及到指针操作,指针操作对于c初学朋友来说或许是一个头痛的事情。

好了,说下一个排序方法吧,叫基于链表的选择排序算法。虽然这种排序算法,运用也链表的排序效率很低,但是有些朋友,在对数组排序时已经习惯用选择排序算法,他们也想方设法写出基于链表排序的选择排序算法,我是应一位朋友的求助,才写这个排序算法的,原因是在原来的链表上直接进行操作,其中就涉及到链表的拆分、合并等等问题。下面请看代码

[c-sharp]view plaincopy

1.void seleted_sort(node *&head)

2.{

3. node *sorted,*unsorted,*min,*upmin;

4. unsorted = head;

5. sorted = NULL;

6.while (unsorted->next)

7. {

8. min = unsorted;

9. node *temp = unsorted->next;

10.//在未排序部分找出最小元素的指针min

11.while (temp)

12. {

13.if ((min->data > temp->data))

14. min = temp;

15. temp = temp->next;

16. }

17.if (unsorted == min)

18. sorted = unsorted;

19.else

20. {

21. upmin = unsorted; //找出找出指向min的链元素

22.while (upmin->next != min)

23. upmin = upmin->next;

24. upmin->next = min->next;

25.if (sorted == NULL)

26. {

27. min->next = head;

28. head = sorted = min;

29. }

30.else

31. {

32. sorted->next = min;

33. min->next = unsorted;

34. sorted = min;

35. }

36. }

37. unsorted = sorted->next;

38. }

39.}

呵呵,上面的代码中肯定还有很多需要完善的地方,如果你在使用的过程当中出现问题了,请别发牢骚,调一调,相信结果就会出来的。嘻嘻,小弟第一次写博,献丑了,多多包涵……

相关文档
最新文档