Skip to content

Commit 5f79e1d

Browse files
committed
adding Sorting Algorithms information
1 parent f4b4153 commit 5f79e1d

File tree

6 files changed

+297
-178
lines changed

6 files changed

+297
-178
lines changed

12-chapter-Sorting-Algorithms.js

Lines changed: 0 additions & 177 deletions
This file was deleted.
Lines changed: 104 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,104 @@
1+
class AdvanceSoritng {
2+
3+
static swap(arr, v1, v2) {
4+
const temp = arr[v1];
5+
arr[v1] = arr[v2];
6+
arr[v2] = temp;
7+
}
8+
9+
10+
static mergeSort(arr) {
11+
if (arr.length < 2) {
12+
return;
13+
}
14+
let step = 1;
15+
let left, right;
16+
while (step < arr.length) {
17+
left = 0;
18+
right = step;
19+
while (right + step <= arr.length) {
20+
this.mergeArrays(arr, left, left+step, right, right+step);
21+
left = right + step;
22+
right = left + step;
23+
}
24+
if (right < arr.length) {
25+
this.mergeArrays(arr, left, left+step, right, arr.length);
26+
}
27+
step *= 2;
28+
}
29+
}
30+
31+
static mergeArrays(arr, startLeft, stopLeft, startRight, stopRight) {
32+
let rightArr = new Array(stopRight - startRight + 1);
33+
let leftArr = new Array(stopLeft - startLeft + 1);
34+
let k = startRight;
35+
for (let i = 0; i < (rightArr.length-1); i++) {
36+
rightArr[i] = arr[k];
37+
++k;
38+
}
39+
40+
k = startLeft;
41+
for (let i = 0; i < (leftArr.length-1); i++) {
42+
leftArr[i] = arr[k];
43+
k++;
44+
}
45+
rightArr[rightArr.length-1] = Infinity; // a sentinel value
46+
leftArr[leftArr.length-1] = Infinity; // a sentinel value
47+
let m = 0;
48+
let n = 0;
49+
for (k = startLeft; k < stopRight; k++) {
50+
if (leftArr[m] <= rightArr[n]) {
51+
arr[k] = leftArr[m];
52+
m++;
53+
} else {
54+
arr[k] = rightArr[n];
55+
n++;
56+
}
57+
}
58+
}
59+
60+
static quickSort(alist) {
61+
this.quickSortHelper(alist,0,alist.length-1);
62+
}
63+
64+
static quickSortHelper(alist,first,last) {
65+
if(first < last) {
66+
const splitpoint = this.partition(alist,first,last);
67+
68+
this.quickSortHelper(alist,first,splitpoint-1);
69+
this.quickSortHelper(alist,splitpoint+1,last);
70+
}
71+
}
72+
73+
static partition(alist,first,last) {
74+
let pivotvalue = alist[first];
75+
76+
let leftmark = first+1;
77+
let rightmark = last;
78+
let done = false;
79+
80+
while (!done) {
81+
while (leftmark <= rightmark && alist[leftmark] <= pivotvalue) {
82+
leftmark = leftmark + 1;
83+
}
84+
85+
while (alist[rightmark] >= pivotvalue && rightmark >= leftmark) {
86+
rightmark = rightmark -1;
87+
}
88+
89+
if (rightmark < leftmark) {
90+
done = true;
91+
} else {
92+
this.swap(alist, leftmark, rightmark);
93+
}
94+
}
95+
96+
let temp = alist[first];
97+
alist[first] = alist[rightmark];
98+
alist[rightmark] = temp;
99+
100+
return rightmark;
101+
}
102+
}
103+
104+
module.exports = AdvanceSoritng;
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
class BasicSorting {
2+
3+
static swap(arr, v1, v2) {
4+
const temp = arr[v1];
5+
arr[v1] = arr[v2];
6+
arr[v2] = temp;
7+
}
8+
9+
static bubbleSort(dataStore) {
10+
const numElements = dataStore.length;
11+
for (let outer = numElements; outer >= 2; outer--) {
12+
for (let inner = 0; inner <= outer - 1; inner++) {
13+
if(dataStore[inner] > dataStore[inner+1]) {
14+
this.swap(dataStore, inner, inner+1);
15+
}
16+
}
17+
}
18+
}
19+
20+
static selectionSort(dataStore) {
21+
let min;
22+
for (let outer = 0; outer <= dataStore.length-2; outer++) {
23+
min = outer;
24+
for (let inner = outer + 1; inner <= dataStore.length-1; inner++) {
25+
if (dataStore[inner] < dataStore[min]) {
26+
min = inner;
27+
}
28+
}
29+
this.swap(dataStore, outer, min);
30+
}
31+
}
32+
33+
static insertionSort(dataStore) {
34+
let temp
35+
let inner;
36+
37+
for (let outer = 1; outer <= dataStore.length-1; outer++) {
38+
temp = dataStore[outer];
39+
inner = outer;
40+
while (inner > 0 && (dataStore[inner-1] >= temp)) {
41+
dataStore[inner] = dataStore[inner-1];
42+
--inner;
43+
}
44+
dataStore[inner] = temp;
45+
}
46+
}
47+
48+
}
49+
50+
module.exports = BasicSorting;
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
const BasicSorting = require('./12-chapter-basic-sorting-algorithms');
2+
const AdvanceSoritng = require('./12-chapter-advance-sorting-algorithms');
3+
4+
function setData(numElements = 100) {
5+
let dataStore = [];
6+
for (let i = 0; i < numElements; i++) {
7+
dataStore[i] = Math.floor(Math.random() * (numElements + 1));
8+
}
9+
return dataStore;
10+
}
11+
12+
function evaluteSortingAlgorithms(dataStore, typeSort) {
13+
console.log(typeSort);
14+
let start = new Date().getTime();
15+
16+
switch (typeSort) {
17+
case 'Bubble Sort':
18+
BasicSorting.bubbleSort(dataStore);
19+
break;
20+
case 'Selection Sort':
21+
BasicSorting.selectionSort(dataStore);
22+
break;
23+
case 'Insertion Sort':
24+
BasicSorting.insertionSort(dataStore);
25+
break;
26+
case 'Merge Sort':
27+
AdvanceSoritng.mergeSort(dataStore);
28+
break;
29+
case 'Quick Sort':
30+
AdvanceSoritng.quickSort(dataStore);
31+
break;
32+
default:
33+
dataStore.sort();
34+
}
35+
36+
let end = new Date().getTime();
37+
console.log(`Elapsed time for the ${typeSort} on ${numElements} elements is: ${end} - ${start} = ${end - start} milliseconds.`);
38+
console.log('###################');
39+
}
40+
41+
const numElements = 10000;
42+
const sortTypes = [
43+
'Bubble Sort',
44+
'Selection Sort',
45+
'Insertion Sort',
46+
'Quick Sort',
47+
'Merge Sort',
48+
'Default JS Sort'
49+
];
50+
51+
sortTypes.forEach(type => evaluteSortingAlgorithms(setData(numElements), type));

0 commit comments

Comments
 (0)