#include <iostream>
using namespace std;
class Node
{
public:
int data;
Node* next;
Node(int data)
{
this->data = data;
this->next = nullptr;
}
};
class LinkedList
{
private:
Node* head;
Node* GetTail(Node* start)
{
while(start->next != nullptr)
start = start->next;
return start;
}
Node* Partition(Node* start, Node* end, Node** newHead, Node** newEnd)
{
Node* pivot = end;
Node* prev = nullptr, *cur = start, *tail = pivot;
while(cur != pivot)
{
if(cur->data < pivot->data)
{
if(*newHead == nullptr)
*newHead = cur;
prev = cur;
cur = cur->next;
}
else
{
if(prev != nullptr)
prev->next = cur->next;
Node* temp = cur->next;
cur->next = nullptr;
tail->next = cur;
tail = cur;
cur = temp;
}
}
if(*newHead == nullptr)
*newHead = pivot;
*newEnd = tail;
return pivot;
}
Node* QuickSortAlgo(Node* start, Node* end)
{
if(!start || start == end)
return start;
Node* newHead = nullptr, *newEnd = nullptr;
Node* pivot = Partition(start, end, &newHead, &newEnd);
if(newHead != pivot)
{
Node* temp = newHead;
while(temp->next != pivot)
temp = temp->next;
temp->next = nullptr;
newHead = QuickSortAlgo(newHead, temp);
temp = GetTail(newHead);
temp->next = pivot;
}
pivot->next = QuickSortAlgo(pivot->next, newEnd);
return newHead;
}
public:
void InsertAtEnd(int data)
{
Node* newNode = new Node(data);
if(!head)
{
head = newNode;
return;
}
Node* last = head;
while(last->next != nullptr)
last = last->next;
last->next = newNode;
}
void QuickSort()
{
head = QuickSortAlgo(head, GetTail(head));
}
void PrintList()
{
Node* temp = head;
while(temp != nullptr)
{
cout << temp->data << " -> ";
temp = temp->next;
}
cout << "null" << endl;
}
};
int main()
{
int n;
cin >> n;
LinkedList* list = new LinkedList();
for(int i = 0; i < n; ++i)
{
int data;
cin >> data;
list->InsertAtEnd(data);
}
cout << "Unsorted list:" << endl;
list->PrintList();
list->QuickSort();
cout << "\nSorted list:" << endl;
list->PrintList();
delete(list);
return 0;
}
Preview:
downloadDownload PNG
downloadDownload JPEG
downloadDownload SVG
Tip: You can change the style, width & colours of the snippet with the inspect tool before clicking Download!
Click to optimize width for Twitter