Beruflich Dokumente
Kultur Dokumente
Text
Read Weiss, 8.1 8.8 O(N2) sorting algorithms: Insertion, Selection, Bubble O(N log N) sorting algorithms HeapSort, MergeSort, QuickSort
Sorting
Assumptions
Array of elements Contains only integers Array contained completely in memory
2) O(N
Sorting Algorithms
Insertion Sort Selection Sort
Bubble Sort
Insertion Sort
Pseudo-code Algorithm
public static void insertionSort(Comparable a[]) { int j; for (int p=1; p<a.length; p++) { Comparable tmp = a[p]; for (j=p; j>0 && tmp.compareTo(a[j-1])<0; j--) a[j] = a[j-1]; a[j]=tmp; } // p } // insertionSort
a :
| 15 | 4 |
13
21
10
i : a :
0 15
i : a :
0 15
p 1
4
2 13
3 2
4 21
5 10
tmp=4
i : a :
0 15
p 1 j 4
2 13
3 2
4 21
tmp=4
i : a :
0 15
p 1 j 15
2 13
3 2
4 21
tmp=4
i : a :
0 j 15
p 1
15
2 13
3 2
4 21
tmp=4
i : a :
0 j 4
p 1
15
2 13
3 2
4 21
5 Copy tmp. 10
tmp=4
i : a :
0 4
1 15
i : a :
0 4
1 15
p 2 j 13
3 2
4 21
tmp=13
i : a :
0 4
1 15
p 2 j 15
3 2
4 21
tmp=13
i : a :
0 4
1 j 15
p 2
15
3 2
4 21
tmp=13
i : a :
0 4
1 j 13
p 2
15
3 2
4 21
5 Copy tmp! 10
tmp=13
i : a :
| sorted | unsorted 0 1 2 | 3 4 5 | 4 13 15 | 2 21 10 |
i : a :
0 4
1 13
2 15
p 3
2
4 21
5 Continue 10
Count comparisons Assume a.length == n In general, for a given p==i the number of comparisons performed in the inner loop is i (from j=p downto j>0)
p: 1 2 3 4 i (n-1) max #comparisons: 1 2 3 4 i (n-1) total number of comparisons 1 + 2 + 3 + + (n-1) = (n-1)n/2
Selection Sort
Pseudo-code Algorithm
public static void selectionSort(Comparable a[]) { for (int p=0; p<a.length-1; p++) { Comparable min = a[p]; int minIndex = p; for (int j=p+1; j<a.length; j++) { if min.compareTo(a[j])>0 { minIndex = j; min = a[j]; } // new min found } // j swap(a,p,minIndex); } // p } // selectionSort
public static void selectionSort(Comparable a[]) { for (int p=0; p<a.length-1; p++) { Comparable min = a[p]; int minIndex = p; for (int j=p+1; j<a.length; j++) { if min.compareTo(a[j])>0 { minIndex = j; min = a[j]; } // new min found } // j swap(a,p,minIndex); } // p } // selectionSort Selection Sort Strategy: In each pass of the outer
| | unsorted i : | 0 1 2 a : | 15 4 13
|
loop, select smallest value in unsorted subarray (i.e., from pth element on). Swap smallest element with pth element. Increment p and repeat.
3 2
4 21
5 10
public static void selectionSort(Comparable a[]) { for (int p=0; p<a.length-1; p++) { Comparable min = a[p]; int minIndex = p; for (int j=p+1; j<a.length; j++) { if min.compareTo(a[j])>0 { minIndex = j; min = a[j]; } // new min found } // j swap(a,p,minIndex); } // p } // selectionSort
Count comparisons. Assume a.length == n In general, for a given p the number of comparisons performed in the inner loop is (from j=p+1 to j<a.length) = (n-p-1)
p: 0 1 2 i (n-3)(n-2) max #comparisons: (n-1)(n-2)(n-3) (n-i-1) 2 1 total number of comparisons (n-1)+(n-2)+ + 2 + 1 = (n-1)n/2
Bubble Sort
Pseudo-code Algorithm
public static void bubbleSort(Comparable a[]) { for (int p=a.length-1; p>0; p--) { for (int j=0; j<p; j++) if (a[j].compareTo(a[j+1])>0) swap(a,j,j+1); } // p } // bubbleSort
Bubble Sort Strategy: Outer loop starts with bottom of array (i.e. p=a.length-1). In each pass of outer loop, bubble largest element down by swapping adjacent elements (i.e., a[j] and a[j+1]) from the top whenever a[j] is larger. Decrement p |and repeat.
i : a :
0 15
1 4
unsorted | 2 3 4 5 | 13 2 21 10 | |
Count comparisons. Assume a.length == n In general, for a given p==i the number of comparisons performed in the inner loop is i (from j=0 to j<p)
p: (n-1) (n-2) (n-3) i 2 1 max #comparisons: (n-1) (n-2) (n-3) i 2 1 total number of comparisons (n-1)+(n-2) + + 2 + 1 = (n-1)n/2
Example
28
29
30
31
Algorithm
Algorithm Build_Max_Heap(A[1..n], n) // Input: Array A[1..n] of size n // Output: Array A[1..n] in heap format for i n/2 downto 1 do Max_Heapify(A, i, n) end Build_Max_Heap.
32
Algorithm...
Algorithm Max_Heapify(A[1..n], i, n) // Input: Array A[1..n] of size n with starting node i // Output: Array A[1..n] in heap format l 2*i r 2*i + 1 if l n and A[l] > A[i] largest l else largest i if r n and A[r] > A[largest] largest r if largest i exchange A[i] A[largest]
33
Heap Sort
34
Heap Sort...
35
Algorithm - HeapSort
Algorithm HeapSort(A[1..n], n) // Input: Array A[1..n] of size n. // Output: Sorted array A Build_Max_Heap(A, n) for i n downto 2 do Exchange A[1] A[i] Max_Heapify(A, 1, i - 1) end HeapSort.
36