单链表进行快速排序:选择尾元素作为枢轴,根据枢轴值把链表划分为两部分,前半部分值小于枢轴值,后半部分值大于枢轴值,划分函数的返回值为指向排好序链表枢轴前一个元素的指针。这个指针有可能是空指针,我们需要做特殊判断。在快排函数中,我们需要对空指针做特殊处理。以下是完整版代码://对单向链表进行快速排序 #include<iostream> #include<random> using namespace std; //链表数据结构 struct ListNode { int val; ListNode *next; }; //在链表末尾追加元素 void appendTail(ListNode **pHead, int val) { ListNode *pNew = new ListNode; pNew->next = NULL; pNew->val = val; if (*pHead == NULL) { *pHead = pNew; } else { ListNode *tmp = *pHead; while (tmp->next) { tmp = tmp->next; } tmp->next = pNew; } } //正序输出链表 void show(ListNode *pHead) { while (pHead) { cout << pHead->val << " "; pHead = pHead->next; } cout << endl; } //获得链表的尾指针 ListNode *getTail(ListNode *pHead) { if (pHead == NULL) return pHead; while (pHead->next) { pHead = pHead->next; } return pHead; } //对链表中的元素进行划分 ListNode * partition(ListNode *&pHead, ListNode *start, ListNode *last) { ListNode *pre = NULL; int val = last->val; ListNode *q = start; bool flag = true; while (q != last) { if (q->val < val && flag) { pre = start; swap(q->val, pre->val);
单链表进行快速排序
最新推荐文章于 2019-12-17 00:26:57 发布
本文介绍了如何使用快速排序算法对单链表进行排序。通过选取尾元素作为枢轴,将链表分为小于枢轴值和大于枢轴值两部分,并递归地对两部分进行排序。代码中提供了不同实现方式,包括交换节点数据域和移动指针的方法,以及针对重复元素的优化。
摘要由CSDN通过智能技术生成