Selection sort
select min in array[0...] and put in array[0] |
select min in subarray [1...] & put in array[1] |
... |
process |
n-1 |
worst case=best case=average |
n*n = n-1 +n-2+...+2+1 |
Buble sort: swapping adjacent element, instead select and swap once. slower than selection sort in average, but best case is better ( n instead n*n for select
Insertion sort
a[0] is treated as sorted part |
arr[1...] is treated as unsorted part |
each unsorted is inserted into sorted part in order |
processes |
n-1 |
worst case(reversed ordered) |
n*n |
best case( sorted in order) |
n |
Merge sort
1 split into 2 part |
2 recursive sort left and right part |
3 leaf node has 1 or 2 elements |
4 and merge |
disadvantage |
temporary arrays, extra space |
advantage |
fast |
process |
nlog(n) |
cost |
n*log(n) |
worst case=best case=average |
input not affect performance |
|
|
Quick Sort
partition array by pivot value |
recursive sort |
scan from both end, swap the bigger on the left to the smaller on the right,until left and right reach the same index, then swap a[pivotposition] with a[0] |
best case |
fastest sort |
Worst case |
split into 0, 1..n-1 always, sorted array using a[0] as pivot |
|
become recursive selection sort |
|
shuffle or select midden of first several element as pivot |
worst case is very inefficient
Compare Sort algorithm
for small n, select and insert sort used, n ~= 7, machine dependent |
for larger n, divide and conquer sort used, until reach a small number. |
in Java, sort array with object type requires the object class must have compareTo() overriden |
Sorting evaluation: CPU time, memory used, array size ( Merge sort( larger)--> quick sort(small) --> <7 select/insert sort) |
sorting process and intermediate results -- on test |
comparison, swap or change, space requirement |
Sequential search
best case |
1 |
worst case |
n |
average |
n/2 |
be careful with the code: index
Binary Search
Array must be sorted in searching key |
if n is not power of two, worst case |
log(n) with n round to power(z,n) |
|
>a[n-2], <a[1] |
if n is power(2), worst case |
log(n) +1 |
|
>a[n-2] |
|
<a[1] is log(n), 1 less |
fully understand the binary sort passes and cost.
The final is either equals an element a[middle] or not in the range.
split subarray does not include a[mid]
|
|
|