-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathMySorts.java
65 lines (55 loc) · 1.85 KB
/
MySorts.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import java.util.ArrayList;
/** Class MySorts
* stores sorting algos: bubble sort, selection sort, insertion sort
*/
public class MySorts {
// Exit-early version of bubble sort
// WC: O(n^2), BC: O(n)
public static void bubble( ArrayList<Comparable> data ) {
boolean swapped;
for (int i = 0; i < data.size(); i++) {
swapped = false;
for (int j = data.size()-1; j > i; j--) {
Comparable p1 = data.get(j);
Comparable p2 = data.get(j-1);
if (p1.compareTo(p2) < 0) {
data.set(j, p2);
data.set(j-1, p1);
swapped = true;
}
}
if (!swapped)
break;
}
}
//this version places greatest value at "rightmost" end
// WC: O(n^2), BC: O(n^2)
public static void selection( ArrayList<Comparable> data ) {
int maxPos;
for (int pass = data.size()-1; pass > 0; pass--) {
Comparable hi = data.get(0);
for (maxPos = pass; maxPos > 0; maxPos--) {
if (data.get(maxPos).compareTo(hi) > 0) {
hi = data.get(maxPos);
}
}
Comparable p1 = data.get(pass);
data.set(pass, hi);
data.set(data.indexOf(hi), p1);
}
}
// WC: O(n^2), BC: O(n)
public static void insertion( ArrayList<Comparable> data ) {
for(int partition = 1; partition < data.size(); partition++) {
for(int i = partition; i > 0; i--) {
if ( data.get(i).compareTo(data.get(i-1)) < 0) {
Comparable dummy = data.get(i);
data.set(i,data.get(i-1));
data.set(i-1,dummy);
}
else
break;
}
}
}
}