当前位置:   article > 正文

单链表的快速排序_快速排序法有一个带头节点的整数单链表l,设计一个算法,将所有的负数节点移动到前

快速排序法有一个带头节点的整数单链表l,设计一个算法,将所有的负数节点移动到前

****【习题 2-13】设有一个带头结点的单链表 L,其中 data 为整数元素。设计一个算法, 首先按递减次序输出该单链表中各结点的数据元素,然后释放所有结点占用的存储空间,并 要求算法的空间复杂度为O(1)

一开始要对单链表排序,空间复杂度又为O(1),快一点的只能是快排和归并。

  1. void swap(ElemType *a,ElemType *b)
  2. {
  3. ElemType x=*a;
  4. *a=*b;
  5. *b=x;
  6. }
  7. node *GetPartion(node *begin,node *end)
  8. {
  9. int key=begin->data;
  10. node *p=begin,*q=p->next;
  11. while(q!=end)
  12. {
  13. if(q->data<key)
  14. {
  15. p=p->next;
  16. swap(&p->data,&q->data);
  17. }
  18. q=q->next;
  19. }
  20. swap(&p->data,&begin->data);
  21. return p;
  22. }
  23. Status Quicksort(node *begin,node *end)
  24. {
  25. if(begin==end)
  26. return ERROR;
  27. node *a=GetPartion(begin,end);
  28. Quicksort(begin,a);
  29. Quicksort(a->next,end);
  30. return OK;
  31. }



下面是用于测试的整个程序和定义

  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #define Status
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/1006934
推荐阅读
相关标签
  

闽ICP备14008679号