Skip to content

Commit dc21f85

Browse files
committed
Sorting functions refactored, avoiding ES6 classes
1 parent 514412f commit dc21f85

File tree

10 files changed

+365
-216
lines changed

10 files changed

+365
-216
lines changed

02-chapter-Array/02-chapter-Arrays.js

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,62 @@ class grades {
1515
}
1616
}
1717

18-
// Implementation of the grade class
18+
// Implementation of the grade using classes
1919
console.log('### Excercise 1');
20-
const gradeObj = [90,89,75];
20+
console.log('## Using ES6 Class, using the new keyword');
21+
const gradeObj = [90,89,75,90,89,75,90,89,75,90,89,75,90,89,75,90,89,75];
2122
const grade = new grades(gradeObj);
2223
grade.addGrade(90);
2324
grade.addGrade(25);
2425
console.log(`Avg grade: ${grade.displayAvg()}`);
2526

27+
28+
const gradesProto = {
29+
init(grades = []) {
30+
this.grades = grades;
31+
return this;
32+
},
33+
addGrade(grade) {
34+
this.grades.push(grade);
35+
},
36+
displayAvg() {
37+
let sum = this.grades.reduce((grades, grade) => grades += grade, 0);
38+
return sum / this.grades.length;
39+
}
40+
}
41+
42+
// Implementation of the grade prototype
43+
console.log('\n## Using prototype, using Object.create()');
44+
const gradeO = [90,89,75,90,89,75,90,89,75,90,89,75,90,89,75,90,89,75];
45+
const gradeP = Object.create(gradesProto).init(gradeO);
46+
gradeP.addGrade(90);
47+
gradeP.addGrade(25);
48+
console.log(`Avg grade: ${gradeP.displayAvg()}`);
49+
50+
const gradesFactory = () => {
51+
let grades = [];
52+
return {
53+
init(g = []) {
54+
grades = g;
55+
return this;
56+
},
57+
addGrade(grade) {
58+
grades.push(grade);
59+
},
60+
displayAvg() {
61+
let sum = grades.reduce((g, grade) => g += grade, 0);
62+
return sum / grades.length;
63+
}
64+
}
65+
}
66+
67+
// Implementation of the grade factory
68+
console.log('\n## Using prototype, using factory');
69+
const grade3 = gradesFactory().init(gradeO);
70+
grade3.addGrade(90);
71+
grade3.addGrade(25);
72+
console.log(`Avg grade: ${grade3.displayAvg()}`);
73+
2674
// #############################################
2775
console.log('\n### Excercise 2');
2876
const arrayWords = ["hello ","my ","friend "];
@@ -88,6 +136,48 @@ console.log(`Week 2 Temp avg: ${thisMonth.averageWeek(2)}`);
88136
console.log(`\nDisplay All Week Avg`);
89137
thisMonth.displayAllWeekAvg();
90138

139+
140+
const weekTempsProto = {
141+
init(dataStore = []) {
142+
this.dataStore = dataStore
143+
return this
144+
},
145+
add(temp){
146+
this.dataStore.push(temp)
147+
},
148+
averageWeek(week) {
149+
let totalDays = this.dataStore[week].length
150+
let total = this.dataStore[week].reduce((week, day) => week += day, 0)
151+
return (total / totalDays).toFixed(2)
152+
},
153+
displayMonthAvg() {
154+
let sum = this.dataStore.reduce((weeks, week) =>
155+
weeks + week.reduce((days, day) => days + day, 0)
156+
, 0)
157+
return (sum / (this.dataStore.length * 4)).toFixed(2)
158+
},
159+
displayAllWeekAvg() {
160+
let sum = 0
161+
this.dataStore.forEach((week, count) => {
162+
week.forEach(day => sum += day )
163+
console.log(`Week ${count + 1} Temp Avg: ${(sum / week.length).toFixed(2)}`)
164+
sum = 0
165+
});
166+
}
167+
};
168+
169+
// Implementation of weekTemps prototype object
170+
console.log('\n## Using prototype')
171+
172+
const month = Object.create(weekTempsProto).init(randomMonth)
173+
174+
console.log(`Month Temp avg: ${month.displayMonthAvg()}`)
175+
console.log(`Week 2 Temp avg: ${month.averageWeek(2)}`)
176+
console.log(`\nDisplay All Week Avg`)
177+
month.displayAllWeekAvg()
178+
179+
console.log(JSON.stringify(weekTempsProto, null, 2));
180+
91181
// #############################################
92182
console.log('\n### Excercise 4');
93183

12-chapter-Sorting-Algorithms/12-chapter-advance-sorting-algorithms.js

Lines changed: 0 additions & 104 deletions
This file was deleted.

12-chapter-Sorting-Algorithms/12-chapter-basic-sorting-algorithms.js

Lines changed: 0 additions & 50 deletions
This file was deleted.
Lines changed: 75 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,75 @@
1+
(function (exports) {
2+
let alist, swap
3+
4+
function bubbleSort () {
5+
const numElements = alist.length
6+
for (let outer = numElements; outer >= 2; outer--) {
7+
for (let inner = 0; inner <= outer - 1; inner++) {
8+
if (alist[inner] > alist[inner + 1]) {
9+
swap(inner, inner + 1)
10+
}
11+
}
12+
}
13+
}
14+
15+
function selectionSort () {
16+
let min
17+
for (let outer = 0; outer <= alist.length - 2; outer++) {
18+
min = outer
19+
for (let inner = outer + 1; inner <= alist.length - 1; inner++) {
20+
if (alist[inner] < alist[min]) {
21+
min = inner
22+
}
23+
}
24+
swap(outer, min)
25+
}
26+
}
27+
28+
function insertionSort () {
29+
let temp
30+
let inner
31+
32+
for (let outer = 1; outer <= alist.length - 1; outer++) {
33+
temp = alist[outer]
34+
inner = outer
35+
while (inner > 0 && (alist[inner - 1] >= temp)) {
36+
alist[inner] = alist[inner - 1]
37+
--inner
38+
}
39+
alist[inner] = temp
40+
}
41+
}
42+
43+
const bubbleObject = {
44+
sort (args) {
45+
swap = [].slice.call(arguments, 1)[0]
46+
alist = args
47+
bubbleSort(0, alist.length - 1)
48+
return alist
49+
}
50+
}
51+
52+
const selectionObject = {
53+
sort (args) {
54+
swap = [].slice.call(arguments, 1)[0]
55+
alist = args
56+
selectionSort(0, alist.length - 1)
57+
return alist
58+
}
59+
}
60+
61+
const insertionObject = {
62+
sort (args) {
63+
alist = args
64+
insertionSort(0, alist.length - 1)
65+
return alist
66+
}
67+
}
68+
69+
Object.assign(
70+
exports,
71+
{bubbleSort: bubbleObject},
72+
{selectionSort: selectionObject},
73+
{insertionSort: insertionObject}
74+
)
75+
}((typeof module.exports !== undefined) ? module.exports : window))

0 commit comments

Comments
 (0)