-
Notifications
You must be signed in to change notification settings - Fork 298
/
Copy pathbasic-sort.js
75 lines (67 loc) · 1.6 KB
/
basic-sort.js
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
66
67
68
69
70
71
72
73
74
75
(function (exports) {
let alist, swap
function bubbleSort () {
const numElements = alist.length
for (let outer = numElements; outer >= 2; outer--) {
for (let inner = 0; inner <= outer - 1; inner++) {
if (alist[inner] > alist[inner + 1]) {
swap(inner, inner + 1)
}
}
}
}
function selectionSort () {
let min
for (let outer = 0; outer <= alist.length - 2; outer++) {
min = outer
for (let inner = outer + 1; inner <= alist.length - 1; inner++) {
if (alist[inner] < alist[min]) {
min = inner
}
}
swap(outer, min)
}
}
function insertionSort () {
let temp
let inner
for (let outer = 1; outer <= alist.length - 1; outer++) {
temp = alist[outer]
inner = outer
while (inner > 0 && (alist[inner - 1] >= temp)) {
alist[inner] = alist[inner - 1]
--inner
}
alist[inner] = temp
}
}
const bubbleObject = {
sort (args) {
swap = [].slice.call(arguments, 1)[0]
alist = args
bubbleSort(0, alist.length - 1)
return alist
}
}
const selectionObject = {
sort (...args) {
alist = args[0]
swap = args[1]
selectionSort(0, alist.length - 1)
return alist
}
}
const insertionObject = {
sort (args) {
alist = args
insertionSort(0, alist.length - 1)
return alist
}
}
Object.assign(
exports,
{bubbleSort: bubbleObject},
{selectionSort: selectionObject},
{insertionSort: insertionObject}
)
}((typeof module.exports !== undefined) ? module.exports : window))