Download presentation
Presentation is loading. Please wait.
Published byDorothy Riley Modified over 9 years ago
1
1 Selection Sort and Quick Sort Instructor: Mainak Chaudhuri mainakc@cse.iitk.ac.in
2
2 Selection sort class SelectionSort { public static void main (String arg[]) { int size = 20; double array[] = new double[size]; Initialize (array, size); // not shown PrintArray (array, size); // not shown Sort (array, size); PrintArray (array, size); // not shown }
3
3 Selection sort public static void Sort (double array[], int size) { int i, j, minIndex; for (i=0;i<=size-2;i++) { minIndex = i; for (j=i+1;j<size;j++) { if (array[j] < array[minIndex]) { minIndex = j; } Swap (array, minIndex, i); // Invariant: array[0] to array[i] is sorted }
4
4 Selection sort public static void Swap (double array[], int p, int q) { double temp; temp = array[p]; array[p] = array[q]; array[q] = temp; } } // end class (How many comparisons?)
5
5 Selection sort Better than bubble sort by a constant factor –Less number of assignments Asymptotically both are O(n 2 )
6
6 Quick sort Pick a “pivot” element and put it in its place –All elements to its left are smaller and all to its right are bigger Recursively sort the left half and the right half Best case is O(nlogn), same as merge sort Worst case is O(n 2 ) Recall that the worst case time for merge sort is O(nlogn)
7
7 Quick sort class QuickSort { public static void main (String arg[]) { int n = 20; double array[] = new double[n]; Initialize (array, n);// not shown Sort (array, 0, n-1); } // continued on next slide
8
8 Quick sort public static void Sort (double array[], int start, int end) { int pivot; if (start < end) { if (start == end-1) { if (array[start] > array[end]) { Swap (array, start, end); } else { pivot = Partition (array, start, end); Sort (array, start, pivot-1); // left half Sort (array, pivot+1, end); // right half } } // continued in next slide
9
9 Quick sort public static int Partition (double array[], int start, int end) { int pivot = start; int downstream = start+1; int upstream = end; while (true) { while ((downstream <= end) && (array[downstream] <= array[pivot])) { downstream++; } // continued in next slide
10
10 Quick sort while ((upstream > start) && (array[upstream] >= array[pivot])) { upstream--; } if (downstream < upstream) { Swap(array, downstream, upstream); } else { break; } Swap (array, pivot, upstream); return upstream; } // continued in next slide
11
11 Quick sort public static void Swap (double array[], int p, int q) { double temp; temp = array[p]; array[p] = array[q]; array[q] = temp; } } // end class
Similar presentations
© 2025 SlidePlayer.com. Inc.
All rights reserved.