sortalgorithm

bubble sort

worst time complexity: $O(n^2)$
best time complexity $O(n)$
average time complexity $O(n^2)$
additional space complexity $O(1)$

1
2
3
4
5
bubble_sort(list, p, r):
for i = p to r-1
for j = i+1 to r
if list[i] > list[j]
swap(list[i],list[j])

selection sort

average time complexity $O(n^2)$
additional space complexity $O(1)$

1
2
3
4
5
6
7
8
selection_sort(list, p, r):
for i = p to r-1
min = i
for j = i+1 to r
if list[j] < min
min = j
if min!=i
swap(list[i], list[min])

Merge sort

time complexity: $O(nlog n)$
space complexity: $O(n)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
merge_sort(list, p, r):
if p >= r
return
mid = ceil(p+r)
merge_sort(list, p, mid)
merge_sort(list, mid+1, r)
i = p
j = mid+1
k = 1
while(i<=mid && j <= r)
if list[i] > list[j]
tmp[k++] = list[j++]
else
tmp[k++] = list[i++]
while(i<=mid)
tmp[k++] = list[i++]
while(j<=r)
tmp[k++] = list[j++]
list[p..r] = tmp

Quick sort

worst time complexity: $O(n^2)$
best time complexity: $O(nlog n)$
average time complexity: $O(n log n)$
additional space complexity: $O(1)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
quick_sort(list, p, r):
if p>=r
return
else
mid = partition(list, p, r)
quick_sort(list, p, mid-1)
quick_sort(list, mid+1, r)
partition(list, p, r):
tmp = list[r]
i = p
j = r-1
while(i<j)
while(i<j && list[i] <= tmp)
i++
while(i<j && list[j] >= tmp)
j--
if(i<j)
swap(list[i], list[j])
swap(list[i], list[r])
return i

heap sort

time complexity: $O(nlog n)$
additional space complexity $O(1)$

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
MAX-HEAPIFY(A, i):
l = LEFT(i)
r = RIGHT(i)
if l <= A.heap-size and A[l]>A[i]
largest = l
else
largest = i
if r <= A.heap-size and A[r]>A[largest]
largest = r
if largest != i
swap(A[i], A[largest])
MAX-HEAPIFY(A, i)
BUILD-MAX-HEAP(A):
A.heap-size = A.length
for i = ceil(A.length/2) downto 1
MAX-HEAPFIFY(A,i)
HEAPSORT(A):
BUILD-MAX-HEAP(A)
for i=A.length downto 2
swap(A[1], A[i])
A.heap-size = A.heap-size - 1
MAX-HEAPIFY(A,1)