当前位置:   article > 正文

C++实现对链表快速排序_链表快速排序c++

链表快速排序c++
  1. #include"stdio.h"
  2. #include"stdlib.h"
  3. #include"time.h"
  4. #define RIGHT 1
  5. #define LEFT 0
  6. // 链表说明
  7. struct Link
  8. {
  9. int data;
  10. struct Link * next;
  11. };
  12. typedef struct Link LINK;
  13. // 创建链表
  14. struct Link *LinkInsert(struct Link *head,int num)
  15. {
  16. if(head==nullptr)
  17. {
  18. head=new struct Link;
  19. head->data=num;
  20. head->next=nullptr;
  21. }
  22. else
  23. {
  24. struct Link *p;
  25. p=head;
  26. head=new struct Link;
  27. head->data=num;
  28. head->next=p;
  29. }
  30. return head;
  31. }
  32. // 打印链表
  33. void LinkPrint(struct Link *head)
  34. {
  35. while(head)
  36. {
  37. printf("%d\t",head->data);
  38. head=head->next;
  39. }
  40. printf("\n");
  41. }
  42. // 释放链表
  43. void LinkFree(struct Link *head)
  44. {
  45. struct Link *p;
  46. while (head)
  47. {
  48. p=head;
  49. head=head->next;
  50. delete p ;
  51. }
  52. }
  53. // 交换节点数值
  54. void Exchange(LINK *a,LINK *b)
  55. {
  56. int temp;
  57. temp=a->data;
  58. a->data=b->data;
  59. b->data=temp;
  60. }
  61. // 快速排序
  62. void QuicklySort(LINK *L,LINK *R)
  63. {
  64. // 当只有一个节点的时候直接结束
  65. if(L==R || L->next==R)
  66. {
  67. return;
  68. }
  69. // 中心节点指针
  70. LINK *P = L;
  71. // i,j,的前面的节点指针
  72. LINK *pi,*pj;
  73. pi=pj=L;
  74. // 慢针和快针指针。
  75. LINK *i=pi->next;
  76. LINK *j=pj->next;
  77. // 判断j是否到达了链表的结尾
  78. while (j!=R)
  79. {
  80. // 如果j节点的数值比P的数值小
  81. if(j->data<P->data)
  82. {
  83. // i节点和j节点交换
  84. Exchange(i,j);
  85. // pi跟上i
  86. pi=i;
  87. // i指向下一个节点
  88. i=i->next;
  89. }
  90. // pj跟上j
  91. pj=j;
  92. // j指向下一个节点
  93. j=j->next;
  94. }
  95. // 交换pi和P
  96. Exchange(pi,P);
  97. // 对L到pi进行快速排序
  98. QuicklySort(L,pi);
  99. // 对i到R进行快速排序。
  100. QuicklySort(i,R);
  101. }
  102. // 随机生成一个链表
  103. LINK *getLinks(LINK *head,long ASIZE,int Maxnum)
  104. {
  105. srand(time(NULL));
  106. for(long i=0;i<ASIZE;i++)
  107. {
  108. head=LinkInsert(head,rand()%Maxnum);
  109. }
  110. return head;
  111. }
  112. // 主函数
  113. int main()
  114. {
  115. struct Link *head ;
  116. head=nullptr;
  117. // insert the node
  118. // 得到一个链表
  119. head=getLinks(head,50,30);
  120. // print links
  121. // LinkPrint(head);
  122. // sorting
  123. // 开始使用快速排序
  124. QuicklySort(head,nullptr);
  125. // print links
  126. // 打印链表
  127. LinkPrint(head);
  128. // free the links
  129. // 释放链表
  130. LinkFree(head);
  131. return 0;
  132. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/1006952
推荐阅读
相关标签
  

闽ICP备14008679号