# Week 5 - Sorting ## Team Team name:Taimour III Date:23-03-2022 Members Nafizul Habib Redwan Rimma Davletova Naomi Verschuur Yazan Tayeh | Role | Name | |-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|------| | **Facilitator** keeps track of time, assigns tasks and makes sure all the group members are heard and that decisions are agreed upon. | Yazan Tayeh | | **Spokesperson** communicates group’s questions and problems to the teacher and talks to other teams; presents the group’s findings. | Rimma Davletova | | **Reflector** observes and assesses the interactions and performance among team members. Provides positive feedback and intervenes with suggestions to improve groups’ processes. | Nafizul Habib R | | **Recorder** guides consensus building in the group by recording answers to questions. Collects important information and data. | Naomi Verschuur | ## Activities Make sure to have the activities signed off regularly to ensure progress is tracked. Download the provided project and open it in CLion. ### Activity 1: Benefits of sorted data The array is sorted. Use a binary search, where you cut the number of elements that are left to look at in half for each element you examine.O(n) The array is unsorted. Just look at each value. O(log n) ### Activity 2: Find the smallest element ```c= if(count == 0){ return NULL; } else { size_t i = 0; while (i < count) { if (values[0] > values[i]) { values[0] = values[i]; } i++; } return &values[0]; } ``` ### Activity 3: Implement selection sort ```c void array_sort(array_t *array){ int n=array->count; int i, j, position, swap; for (i = 0; i < (n - 1); i++) { position = i; for (j = i + 1; j < n; j++) { if (array->data[position] > array->data[j]) position = j; } if (position != i) { swap = array->data[i]; array->data[i] = array->data[position]; array->data[position] = swap; } } } ``` ### Activity 4: Selection sort: comparisons List length=15 ; Comparions=105 List length=20 ; Comparions=190 List length=30 ; Comparions=435 List length=60 ; Comparions=1770 List length=90 ; Comparions=4005 List length=150 ; Comparions=11175 List length=300 ; Comparions=44850 ### Activity 5: Merge sort - step by step ```c= [0,9] [5,31] [2,8] [13,15] [4,6] [7,11] [19] [0,5,9,31] [2,8,13,15] [4,6,7,11] [19] [0,2,5,8,9,13,15,31] [4,6,7,11,19] [0,2,4,5,6,7,8,9,11,13,15,19,31] ``` ### Activity 6: Splitting a linked list in two halves ```c= node_t * split(node_t * phead) { if(phead == NULL) return NULL; node_t * fast = phead->next; while (fast != NULL && fast->next != NULL) { fast = fast->next; // update fast pointer if(fast == NULL) break; fast = fast->next; phead = phead->next; // update slow pointer } node_t *toReturn = phead->next; phead->next = NULL; return toReturn; } ``` ### Activity 7: Merging two linked lists ```c= node_t * merge(node_t * a, node_t * b) { node_t temp = {.next = NULL}; node_t * result = &temp; while (a != NULL && b != NULL) { // while both lists have elements if (a->value < b->value) { // compare head of both lists result->next = a; // append a to result a = a->next; } else { result->next = b; // append b to result b = b->next; } result = result->next; } // more code is needed here! if (a != NULL) { temp.next = a; } else if (b != NULL) { temp.next = b; } return temp.next; } ``` ### Activity 8: Implement merge sort ```c= // merge-sorts the list starting in first, and returns the first element // of the resulting list node_t * merge_sort(node_t * first) { if (first->next == NULL) { return first; // only a single node, so already sorted } else { node_t * next = split(first); if (l < r) { int m = l + (r - l) / 2; // Sort first and second halves merge_sort(arr, l, m); merge_sort(arr, m + 1, r); } merge(first, next); return first; } } ``` ### Activity 9: Merge sort: comparisons 15-40 20-67 30-109 60-285 90-469 150-911 300-2100 ### Activity 10: Compare merge sort and selection sort | Algorithm | Time complexity | | --------------------------------- | --------------- | | Merge sort | O(n*Log(n) | | Selection sort | O(n^2) | ## Looking back ### What we've learnt Formulate at least one lesson learned. ### What were the surprises Fill in... ### What problems we've encountered Fill in... ### What was or still is unclear Fill in... ### How did the group perform? How was the collaboration? What were the reasons for hick-ups? What worked well? What can be improved next time? > Written with [StackEdit](https://stackedit.io/).