Presentation is loading. Please wait.

Presentation is loading. Please wait.

Basic Sorting Algorithms Dr. Yingwu Zhu. Sorting Problem Consider list x 1, x 2, x 3, … x n Goal: arrange the elements of the list in order Ascending.

Similar presentations


Presentation on theme: "Basic Sorting Algorithms Dr. Yingwu Zhu. Sorting Problem Consider list x 1, x 2, x 3, … x n Goal: arrange the elements of the list in order Ascending."— Presentation transcript:

1 Basic Sorting Algorithms Dr. Yingwu Zhu

2 Sorting Problem Consider list x 1, x 2, x 3, … x n Goal: arrange the elements of the list in order Ascending or descending Some O(n 2 ) schemes easy to understand and implement inefficient for large data sets

3 Basic Sorting Algorithms Selection sort Bubble sort (Exchange sort) Insertion sort

4 Selection Sort Make passes through a list/sublist On each pass reposition correctly some element. E.g., find the smallest item in the sublist and put it into a right position

5 Simple Selection Sort Algorithm Array-based Can you implement it? void select_sort(int a[], int n); Q: What’s the computing time T(n)?

6 Simple Selection Sort Algorithm void select_sort(int a[], int n) { for (int i=0; i a[j]) min_pos = j; } if (min_pos != i) { T temp = a[i]; a[i] = a[min_pos]; a[min_pos] = temp; } } T(n) = ?

7 Simple Selection Sort Algorithm Linked List-based

8 Simple Selection Sort Algorithm void selection_sort(Node* head) { while (head) { Node* ptr = head->next; while (ptr) { if (head->data > ptr->data) { int temp = head->data; head->data = ptr->data; ptr->data = temp; } ptr = ptr->next; } head = head->next; }

9 Simple Selection Sort Algorithm Linked List-based Why not move the nodes around? If we wanna move the nodes around, what more should we do? What is different from array-based?

10 Exchange Sort Systematically interchange pairs of elements which are out of order Bubble sort does this Out of order, exchange In order, do not exchange

11 Bubble Sort void bubble_sort(int a[], int n) For naïve implementation, how many iterations should be made in order to make the list in order?

12 Bubble Sort Can we improve the naïve implementation? Detect partially sorted sublist!

13 Bubble Sort void bubble_sort(int a[], int n) { int num_compares = n-1; //first should do n-1 comparisons while (num_compares > 0) { int last = 0; //why need this? for (int i=0; i<num_compares; i++) { if (a[i] > a[i+1]) { swap(a[i], a[i+1]); last = i; } //end if num_compares = last; } //end while } // thinking: why need last = i??? The purpose of last?

14 Bubble Sort Disadvantage? Swap of data items, but if data item is large, swap could be very inefficient Advantage over selection sort? It can detect partially sorted sublist.

15 Bubble Sort Algorithm What is the worst case for Bubble Sort?

16 Bubble Sort Algorithm What is the worst case for Bubble Sort? The list of items are in decreasing order. T(n) = O(n^2)

17 Bubble Sort Algorithm What is the best case for Bubble Sort?

18 Bubble Sort Algorithm What is the best case for Bubble Sort? T(n) = O(n)

19 Insertion Sort Repeatedly insert a new element into an already sorted list Note this works well with a linked list implementation Why not good for arrays? Dynamic sorting algorithm

20 Example of Insertion Sort Given list to be sorted 67, 33, 21, 84, 49, 50, 75 Note sequence of steps carried out

21 Insertion Sort Idea: Two logical sublists: one is sorted and the other is unsorted Each iteration chooses the first item from the unsorted list and inserts it into the sorted one. Dynamically expand/shrink the two sublists

22 Algorithm for Insertion Sort void insertion_sort(int a[], int n)

23 Algorithm for Linear Insertion Sort void insertion_sort(int a[], int n) { int temp; for (int i = 1; i<n; i++) { temp = a[i]; // keep the item to be inserted int j; for (j = i-1; j >= 0; j--) //go through the sorted sublist if (temp < a[j]) a[j+1] = a[j]; //shift the items else break; a[j+1] = temp; } //end for }

24 Algorithm for Linear Insertion Sort T(n) = ? If we use a linked-list instead of an array, how do we adapt the previous code? Write a linked-list based one Do you know the difference?

25 Insertion Sort Can we write a recursive insertion sort? void insert_sort(int a[], int n)

26 Can we have better Sorting Algorithms We seek improved computing times for sorts of large data sets, better than O(n^2) Chapter presents schemes (e.g. heapsort) which can be proven to have average computing time O( n log 2 n ) Must be said, no such thing as a universally good sorting scheme Results may depend just how out of order list is

27 Indirect Sorts Possible that the items being sorted are large structures Data transfer/swapping time unacceptable Alternative is indirect sort Uses index table to store positions of the objects Manipulate the index table for ordering Where will this technique be used? Name one

28 Question?


Download ppt "Basic Sorting Algorithms Dr. Yingwu Zhu. Sorting Problem Consider list x 1, x 2, x 3, … x n Goal: arrange the elements of the list in order Ascending."

Similar presentations


Ads by Google