#include <cstdint>
#include <algorithm>
#include <unistd.h>
#include <stdio.h>
struct node
{
int value;
node *next;
node(int v) : value(v), next(nullptr){}
};
node *Partion(node *begin, node *end)
{
if (begin == nullptr)
{
// error
return nullptr;
}
if (begin == end) {
return begin;
}
int value = begin->value;
node* p = begin;
node* q = begin->next;
while (q != end)
{
if (q->value < value)
{
p = p->next;
std::swap(p->value, q->value);
}
q = q->next;
}
std::swap(p->value, begin->value);
return p;
}
void QuickSort(node* pBeign, node* pEnd)
{
if(pBeign != pEnd)
{
node* partion = Partion(pBeign, pEnd);
QuickSort(pBeign, partion);
QuickSort(partion->next, pEnd);
}
}
int main(int argc, char const *argv[])
{
node* n1 = new node(5);
node* n2 = new node(2);
node* n3 = new node(4);
node* n4 = new node(6);
node* n5 = new node(6);
node* n6 = new node(9);
node* n7 = new node(0);
node* n8 = new node(1);
n1->next = n2;
n2->next = n3;
n3->next = n4;
n4->next = n5;
n5->next = n6;
n6->next = n7;
n7->next = n8;
node * head = n1;
QuickSort(n1, nullptr);
auto n = head;
while (n != nullptr) {
printf("%d->", n->value);
n = n->next;
}
printf("\n");
return 0;
}
单向链表的N*log(N)的原址排序
最新推荐文章于 2024-09-20 14:26:28 发布