QuickSort on Doubly Linked List Python
- Get link
- X
- Other Apps
PROGRAM TO IMPLEMENT QUICK SORT ON DOUBLY LINKED LIST
using
System;
public
class
QuickSort_using_Doubly_LinkedList
{
Node head;
/* a node of the doubly linked list */
public
class
Node{
public
int
data;
public
Node next;
public
Node prev;
public
Node(
int
d){
data = d;
next =
null
;
prev =
null
;
}
}
// A utility function to find the last node of linked list
Node lastNode(Node node)
{
while
(node.next!=
null
)
node = node.next;
return
node;
}
/* Considers last element as pivot,
places the pivot element at its
correct position in a sorted array,
and places all smaller (smaller than
pivot) to left of pivot and all
greater elements to right of pivot */
Node partition(Node l,Node h)
{
// set pivot as h element
int
x = h.data;
// similar to i = l-1 for array implementation
Node i = l.prev;
int
temp;
// Similar to "for (int j = l; j <= h- 1; j++)"
for
(Node j=l; j!=h; j=j.next)
{
if
(j.data <= x)
{
// Similar to i++ for array
i = (i==
null
) ? l : i.next;
temp = i.data;
i.data = j.data;
j.data = temp;
}
}
i = (i ==
null
) ? l : i.next;
// Similar to i++
temp = i.data;
i.data = h.data;
h.data = temp;
return
i;
}
/* A recursive implementation of
quicksort for linked list */
void
_quickSort(Node l,Node h)
{
if
(h!=
null
&& l!=h && l!=h.next){
Node temp = partition(l,h);
_quickSort(l,temp.prev);
_quickSort(temp.next,h);
}
}
// The main function to sort a linked list.
// It mainly calls _quickSort()
public
void
quickSort(Node node)
{
// Find last node
Node head = lastNode(node);
// Call the recursive QuickSort
_quickSort(node,head);
}
// A utility function to print contents of arr
public
void
printList(Node head)
{
while
(head!=
null
){
Console.Write(head.data+
" "
);
head = head.next;
}
}
/* Function to insert a node at the
beginging of the Doubly Linked List */
void
push(
int
new_Data)
{
Node new_Node =
new
Node(new_Data);
/* allocate node */
// if head is null, head = new_Node
if
(head==
null
)
{
head = new_Node;
return
;
}
/* link the old list off the new node */
new_Node.next = head;
/* change prev of head node to new node */
head.prev = new_Node;
/* since we are adding at the
beginning, prev is always NULL */
new_Node.prev =
null
;
/* move the head to point to the new node */
head = new_Node;
}
/* Driver code */
public
static
void
Main(String[] args){
QuickSort_using_Doubly_LinkedList list =
new
QuickSort_using_Doubly_LinkedList();
list.push(5);
list.push(20);
list.push(4);
list.push(3);
list.push(30);
Console.WriteLine(
"Linked List before sorting "
);
list.printList(list.head);
Console.WriteLine(
"\nLinked List after sorting"
);
list.quickSort(list.head);
list.printList(list.head);
}
}
OUTPUT:
Linked List before sorting 30 3 4 20 5 Linked List after sorting 3 4 5 20 30
- Get link
- X
- Other Apps
Comments
Post a Comment