当前位置:   article > 正文

基于单链表的快速排序算法(C++)_c++实现单链表快速排序

c++实现单链表快速排序

考研倒计时4天,写个代码放松放松。

国科大19年863最后一题数据结构大题:待排序列采用带头结点的单链表,写出在其上进行的快速排序的递归算法。

算法思想:快排核心思想是每一趟确定一个基元素的最终位置,小于它的在左边,大于它的在右边。题目给了单链表,那就没办法随机访问,但是不影响将一段链表分为两段的操作,那就用几个指针通过一次遍历将一段链表分为两段,然后基元素放中间,最后递归左右两段链表就行了。时间复杂度不变的,依然是O(n log n)。

代码如下:

  1. #include <iostream>
  2. using namespace std;
  3. /*
  4. 题目:链式存储的快排
  5. 作者:伊特玛德神
  6. 算法思想:
  7. 每一趟以第一个元素为基准
  8. q依次后移,若小于基准,则与p交换
  9. p与q之间的维持大于基准的元素
  10. 最后将基准与p交换
  11. 此时基准左边是小于的链表,右边是大于的
  12. 然后进行下一趟
  13. 快排左边和右边的链表
  14. */
  15. typedef struct node {
  16. int val;
  17. node* next;
  18. }node;
  19. void my_swap(node* p, node* q) {
  20. // 自写交换函数
  21. // 只交换值,不更改链表指针,减少执行时间
  22. // 这里如果想交换指针,就需要增加前驱,麻烦点而已
  23. int tmp = p->val;
  24. p->val = q->val;
  25. q->val = tmp;
  26. }
  27. void quick_sort_list(node* head, node* tail) {
  28. if (head == tail || head == NULL || head == tail->next
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/神奇cpp/article/detail/1006937
推荐阅读
相关标签
  

闽ICP备14008679号