对链表进行快速排序
定义链表
typedef int ElemType;
typedef struct ListNode
{
ElemType data;
ListNode* next;
}ListNode, * LinkList;
对链表的初始化
尾插法
ListNode* Init_List(const vector<int>& br)
{
ListNode* head = (ListNode*)malloc(sizeof(ListNode));
head->data = br[0];
head->next = nullptr;
ListNode* p = head;
for (int i = 1; i < br.size(); ++i)
{
ListNode* s = (ListNode*)malloc(sizeof(ListNode));
s->data = br[i];
s->next = nullptr;
p->next = s;
p = p->next;
}
return head;
}
打印链表
void Print_List(ListNode* p)
{
while (p != nullptr)
{
cout << p->data << " ";
p = p->next;
}
cout << endl;
}
对链表的划分
ListNode* LinkParition(ListNode* left, ListNode* right)
{
ListNode* ip = left;
ListNode* jp = left->next;
int tmp = left->data;
while (jp != right)
{
if (jp->data <= tmp)
{
ip = ip->next;
std::swap(ip->data, jp->data);
}
jp = jp->next;
}
std::swap(left->data, ip->data);
return ip;
}
对链表快速排序
void QuickPass(ListNode* left, ListNode* right)
{
if (left != right)
{
ListNode* p = LinkParition(left, right);
QuickPass(left, p);
QuickPass(p->next, right);
}
}
void ListQuickSort(ListNode* head)
{
QuickPass(head, nullptr);
}
书写主函数
int main()
{
vector<int> ar = { 56,34,23,78,90,12,45,67,89,100 };
LinkList head = Init_List(ar);
Print_List(head);
ListQuickSort(head);
Print_List(head);
return 0;
}