Question

In: Computer Science

(Write a C# program DO NOT USE CLASS)Implement the merge sort algorithm using a linked list...

(Write a C# program DO NOT USE CLASS)Implement the merge sort algorithm using a linked list instead of arrays. You can use any kind of a linked structure, such as single, double, circular lists, stacks and/or queues. You can populate your list from an explicitly defined array in your program. HINT: You will not be using low, middle and high anymore. For finding the middle point, traverse through the linked list while keeping count of the number of nodes. Break up the list into two, null terminated lists, based on the node count. //Here is a portion of what mergeSort function would look like: //a points to the left partition, b points to the right partition. They would be passed by reference. //You would then recursively process each partition. if(head==NULL) return NULL; if (head->next==NULL) return head; a=mergeSort(a); b=mergeSort(b); c=merge(a,b); return (c); //These are the function headers void split (node* head,node*&a,node*&b) node* merge(node* a, node* b) node* mergeSort( node* head) Make sure to account for when head is null or when there is only one item in the list.

Solutions

Expert Solution

// linked list merged sort by C++
using namespace std;

/* Link list node */
class Node {
public:
   int data;
   Node* next;
};

/* function prototypes */
Node* SortedMerge(Node* a, Node* b);
void FrontBackSplit(Node* source,
                   Node** frontRef, Node** backRef);

/* sorts the linked list by changing next pointers (not data) */
void MergeSort(Node** headRef)
{
   Node* head = *headRef;
   Node* a;
   Node* b;

   /* Base case -- length 0 or 1 */
   if ((head == NULL) || (head->next == NULL)) {
       return;
   }

   /* Split head into 'a' and 'b' sublists */
   FrontBackSplit(head, &a, &b);

   /* Recursively sort the sublists */
   MergeSort(&a);
   MergeSort(&b);

   /* answer = merge the two sorted lists together */
   *headRef = SortedMerge(a, b);
}
Node* SortedMerge(Node* a, Node* b)
{
   Node* result = NULL;

   /* Base cases */
   if (a == NULL)
       return (b);
   else if (b == NULL)
       return (a);

   /* Pick either a or b, and recur */
   if (a->data <= b->data) {
       result = a;
       result->next = SortedMerge(a->next, b);
   }
   else {
       result = b;
       result->next = SortedMerge(a, b->next);
   }
   return (result);
}

/* UTILITY FUNCTIONS */
/* Split the nodes into front and back halves,
   and return two lists using the reference parameters.
   If the length is odd, the extra node should go in the front list.
we can Use the fast/slow pointer strategy. */
void FrontBackSplit(Node* source,
                   Node** frontRef, Node** backRef)
{
   Node* fast;
   Node* slow;
   slow = source;
   fast = source->next;

   /* Advance 'fast' two nodes, and advance 'slow' one node */
   while (fast != NULL) {
       fast = fast->next;
       if (fast != NULL) {
           slow = slow->next;
           fast = fast->next;
       }
   }

   /* 'slow' is before the midpoint in the list, so split it in two
   at that point. */
   *frontRef = source;
   *backRef = slow->next;
   slow->next = NULL;
}

/* Function to print nodes in a given linked list */
void printList(Node* node)
{
   while (node != NULL) {
       cout << node->data << " ";
       node = node->next;
   }
}

/* Function to insert a node at the beginging of the linked list */
void push(Node** head_ref, int new_data)
{
   /* allocate node */
   Node* new_node = new Node();

   /* put in the data */
   new_node->data = new_data;

   /* link the old list off the new node */
   new_node->next = (*head_ref);

   /* move the head to point to the new node */
   (*head_ref) = new_node;
}

/* Driver program to test above functions*/
int main()
{
   /* Start with the empty list */
   Node* res = NULL;
   Node* a = NULL;

   /* unsorted linked lists to test the functions
Created lists shall be a: 2->3->20->5->10->15 */
   push(&a, 15);
   push(&a, 10);
   push(&a, 5);
   push(&a, 20);
   push(&a, 3);
   push(&a, 2);

   /* Sort the above created Linked List */
   MergeSort(&a);

   cout << "Sorted Linked List is: \n";
   printList(a);

   return 0;
}

OUTPUT :

Sorted Linked List is: 
2 3 5 10 15 20

Related Solutions

Write a program that performs a merge-sort algorithm without using a recursion. c++ programming language(Only #inlclude...
Write a program that performs a merge-sort algorithm without using a recursion. c++ programming language(Only #inlclude <iostream>)
4) Implement the Selection Sort algorithm discussed in class to sort a list of a certain...
4) Implement the Selection Sort algorithm discussed in class to sort a list of a certain size. The list is to be implemented using a dynamic array as well as a singly linked list. You are required to compare the performance (sorting time) for the dynamic array and singly-linked list-based implementations. You are given the startup codes for the dynamic array and singly-linked list based implementations. You are required to implement the Selection Sort function in each of these codes....
Write a code to implement a python queue class using a linked list. use these operations...
Write a code to implement a python queue class using a linked list. use these operations isEmpty • enqueue. • dequeue    • size Time and compare the performances of the operations ( this is optional but I would appreciate it)
implementing linked list using c++ Develop an algorithm to implement an employee list with employee ID,...
implementing linked list using c++ Develop an algorithm to implement an employee list with employee ID, name, designation and department using linked list and perform the following operations on the list. Add employee details based on department Remove employee details based on ID if found, otherwise display appropriate message Display employee details Count the number of employees in each department
Write a code to implement a python stack class using linked list. use these operations isEmpty...
Write a code to implement a python stack class using linked list. use these operations isEmpty   • push. • pop.   • peek. • size Time and compare the performances ( this is optional but I would appreciate it)
Write a function in C that uses the Merge Sort sorting algorithm with arrays. The function...
Write a function in C that uses the Merge Sort sorting algorithm with arrays. The function must not be void and must output type int* i.e. it must take the form: int* merge_sort(int a[], int n) where a[ ] is the input matrix and n is the size of the matrix. You may use an auxiliary functions such as "merge." The returned array should be sorted using merge_sort and should not modify the array that was input (a[ ] ).
Write a program in Java to sort the given array using merge sort, quick sort, insertion...
Write a program in Java to sort the given array using merge sort, quick sort, insertion sort, selection sort and bubble sort based on the input from the user which sorting technique they wanted to use. Get the array size, array elements from the user, and also display the sorted array along with the name of the sorting technique used.
Write a MIPS program using the Bubble Sort algorithm, that sorts an input list of integers...
Write a MIPS program using the Bubble Sort algorithm, that sorts an input list of integers by repeatedly calling a “swap” subroutine. The original unsorted list of integers should be received from the keyboard input. Your program should first prompt the user “Please input an integer for the number of elements:”. After the user enters a number and return, your program outputs message “Now input each element and then a return:”. For example, if the user enters 5 as the...
Write Insertion Sort and Bubble Sort Program for C# also write their algorithm and Explain their...
Write Insertion Sort and Bubble Sort Program for C# also write their algorithm and Explain their working.
Write a program in C++ to test either the selection sort or insertion sort algorithm for...
Write a program in C++ to test either the selection sort or insertion sort algorithm for array-based lists as given in the chapter. Test the program with at least three (3) lists. Supply the program source code and the test input and output. List1: 14,11,78,59 List2: 15, 22, 4, 74 List3: 14,2,5,44
ADVERTISEMENT
ADVERTISEMENT
ADVERTISEMENT