Skip to content

Commit 4fc5b24

Browse files
author
Kenneth Apeland
committed
MS: visualiseringen fungerer, trenger bare litt polering
1 parent 86077b5 commit 4fc5b24

10 files changed

+148
-216
lines changed

MergeSort/js/MergeSortAlgorithm.js

+25-19
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ function checkIfAlreadyRunning() {
2020
function startMergeSort() {
2121
checkIfAlreadyRunning();
2222
copyArray = returnArray();
23-
mergesort(returnArray());
23+
mergesort(copyArray);
2424
}
2525
function mergesort(array) {
2626
if (array.length < 2) {
@@ -33,11 +33,17 @@ function mergesort(array) {
3333
var left = void 0;
3434
var right = void 0;
3535
mid = Math.floor(array.length * 0.5);
36-
viewer.setPivotElement(copyArray.indexOf(array[mid - 1]));
36+
//viewer.setPivotElement(copyArray.indexOf(array[mid - 1]));
3737
left = array.slice(0, mid);
38-
viewer.lowerElements(copyArray.indexOf(left[0]), copyArray.indexOf(left[left.length - 1]));
38+
for (var i = 0; i < left.length; i++) {
39+
console.log("left " + left[i]);
40+
viewer.lowerElement(left[i]);
41+
}
3942
right = array.slice(mid);
40-
viewer.lowerElements(copyArray.indexOf(right[0]), copyArray.indexOf(right[right.length - 1]));
43+
for (var i = 0; i < right.length; i++) {
44+
console.log("right " + right[i]);
45+
viewer.lowerElement(right[i]);
46+
}
4147
//Split until there is only 1 element left
4248
return merge(mergesort(left), mergesort(right));
4349
}
@@ -47,27 +53,25 @@ function merge(left, right) {
4753
var result = [];
4854
var tempLeftIndex = 0;
4955
var tempRightIndex = 0;
50-
var start = copyArray.indexOf(left[0]);
51-
var end = copyArray.indexOf(right[right.length - 1]);
52-
var counter = start;
56+
var counter = copyArray.indexOf(left[0]);
5357
var testing = copyArray.slice(0);
5458
while (tempLeftIndex < left.length && tempRightIndex < right.length) {
5559
//Compare the elements from each array
5660
//viewer.highLightNode(tempLeftIndex)
5761
//viewer.highLightNode(tempRightIndex)
5862
if (left[tempLeftIndex] < right[tempRightIndex]) {
59-
console.log("LEFT of : " + copyArray.indexOf(left[tempLeftIndex]) + " end " + end + " to place " + counter);
60-
viewer.liftElements(copyArray.indexOf(left[tempLeftIndex]), copyArray.indexOf(left[tempLeftIndex]));
61-
viewer.moveElementToPlace(copyArray.indexOf(left[tempLeftIndex]), end, counter, false);
63+
console.log("LEFT of : " + left[tempLeftIndex] + " to place " + counter * 85);
64+
//viewer.liftElement(left[tempLeftIndex]);
65+
viewer.moveElementToPlace(left[tempLeftIndex], counter * 85);
6266
result.push(left[tempLeftIndex]);
6367
testing[counter] = left[tempLeftIndex];
6468
counter++;
6569
tempLeftIndex++;
6670
}
6771
else {
68-
console.log("RIGHT of : " + copyArray.indexOf(right[tempRightIndex]) + " end " + end + " to place " + counter);
69-
viewer.liftElements(copyArray.indexOf(right[tempRightIndex]), copyArray.indexOf(right[tempRightIndex]));
70-
viewer.moveElementToPlace(copyArray.indexOf(right[tempRightIndex]), end, counter, false);
72+
console.log("RIGHT of : " + right[tempRightIndex] + " to place " + counter * 85);
73+
//viewer.liftElement(right[tempRightIndex]);
74+
viewer.moveElementToPlace(right[tempRightIndex], counter * 85);
7175
result.push(right[tempRightIndex]);
7276
testing[counter] = right[tempRightIndex];
7377
counter++;
@@ -76,21 +80,23 @@ function merge(left, right) {
7680
}
7781
if (right.slice(tempRightIndex).length > 0) {
7882
var moreRight = right.slice(tempRightIndex);
79-
console.log("MoRe right " + moreRight);
8083
for (var i = 0; i < moreRight.length; i++) {
84+
console.log("MoRe right " + moreRight[i] + " to place " + counter * 85);
8185
testing[counter] = moreRight[i];
82-
viewer.liftElements(testing.indexOf(moreRight[i]), testing.indexOf(moreRight[i]));
83-
viewer.deselectPivotElement(copyArray.indexOf(moreRight[i]));
86+
viewer.moveElementToPlace(moreRight[i], counter * 85);
87+
//viewer.liftElement(moreRight[i]);
88+
viewer.deselectPivotElement(moreRight[i]);
8489
counter++;
8590
}
8691
}
8792
if (left.slice(tempLeftIndex).length > 0) {
8893
var moreLeft = left.slice(tempLeftIndex);
89-
console.log("MoRe left " + moreLeft);
9094
for (var i = 0; i < moreLeft.length; i++) {
95+
console.log("MoRe right " + moreLeft[i] + " to place " + counter * 85);
9196
testing[counter] = moreLeft[i];
92-
viewer.liftElements(testing.indexOf(moreLeft[i]), testing.indexOf(moreLeft[i]));
93-
viewer.deselectPivotElement(copyArray.indexOf(moreLeft[i]));
97+
viewer.moveElementToPlace(moreLeft[i], counter * 85);
98+
//viewer.liftElement(moreLeft[i]);
99+
viewer.deselectPivotElement(moreLeft[i]);
94100
counter++;
95101
}
96102
}

MergeSort/js/MergeSortAlgorithm.ts

+27-22
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ function startMergeSort() {
2525
checkIfAlreadyRunning();
2626

2727
copyArray = returnArray();
28-
mergesort(returnArray());
28+
mergesort(copyArray);
2929
}
3030

31-
function mergesort(array: number[]) {
31+
function mergesort(array :number[]) {
3232
if (array.length < 2) {
3333
//viewer.deselectPivotElement(sortArray.indexOf(array[0]));
3434
//viewer.liftElements(copyArray.indexOf(array[0]), copyArray.indexOf(array[0]));
@@ -41,13 +41,20 @@ function mergesort(array: number[]) {
4141
let right: number[];
4242

4343
mid = Math.floor(array.length * 0.5);
44-
viewer.setPivotElement(copyArray.indexOf(array[mid - 1]));
44+
//viewer.setPivotElement(copyArray.indexOf(array[mid - 1]));
4545

4646
left = array.slice(0, mid);
47-
viewer.lowerElements(copyArray.indexOf(left[0]), copyArray.indexOf(left[left.length - 1]));
47+
for (let i = 0; i < left.length; i++) {
48+
console.log("left " + left[i]);
49+
viewer.lowerElement(left[i]);
50+
}
51+
4852

4953
right = array.slice(mid);
50-
viewer.lowerElements(copyArray.indexOf(right[0]), copyArray.indexOf(right[right.length - 1]));
54+
for (let i = 0; i < right.length; i++) {
55+
console.log("right " + right[i]);
56+
viewer.lowerElement(right[i]);
57+
}
5158

5259
//Split until there is only 1 element left
5360
return merge(mergesort(left), mergesort(right));
@@ -61,9 +68,7 @@ function merge(left: number[], right: number[]) {
6168
let tempLeftIndex: number = 0;
6269
let tempRightIndex: number = 0;
6370

64-
let start: number = copyArray.indexOf(left[0])
65-
let end: number = copyArray.indexOf(right[right.length - 1]);
66-
let counter: number = start;
71+
let counter: number = copyArray.indexOf(left[0]);
6772
let testing: number[] = copyArray.slice(0);
6873

6974
while (tempLeftIndex < left.length && tempRightIndex < right.length) {
@@ -74,9 +79,9 @@ function merge(left: number[], right: number[]) {
7479

7580
if (left[tempLeftIndex] < right[tempRightIndex]) {
7681

77-
console.log("LEFT of : " + copyArray.indexOf(left[tempLeftIndex]) + " end " + end + " to place " + counter);
78-
viewer.liftElements(copyArray.indexOf(left[tempLeftIndex]), copyArray.indexOf(left[tempLeftIndex]));
79-
viewer.moveElementToPlace(copyArray.indexOf(left[tempLeftIndex]), end, counter, false);
82+
console.log("LEFT of : " + left[tempLeftIndex] + " to place " + counter*85);
83+
//viewer.liftElement(left[tempLeftIndex]);
84+
viewer.moveElementToPlace(left[tempLeftIndex], counter*85);
8085

8186
result.push(left[tempLeftIndex]);
8287
testing[counter] = left[tempLeftIndex];
@@ -85,9 +90,9 @@ function merge(left: number[], right: number[]) {
8590
tempLeftIndex++;
8691

8792
} else {
88-
console.log("RIGHT of : " + copyArray.indexOf(right[tempRightIndex]) + " end " + end + " to place " + counter);
89-
viewer.liftElements(copyArray.indexOf(right[tempRightIndex]), copyArray.indexOf(right[tempRightIndex]));
90-
viewer.moveElementToPlace(copyArray.indexOf(right[tempRightIndex]), end, counter, false);
93+
console.log("RIGHT of : " + right[tempRightIndex] + " to place " + counter*85);
94+
//viewer.liftElement(right[tempRightIndex]);
95+
viewer.moveElementToPlace(right[tempRightIndex], counter*85);
9196

9297
result.push(right[tempRightIndex]);
9398
testing[counter] = right[tempRightIndex];
@@ -100,24 +105,24 @@ function merge(left: number[], right: number[]) {
100105

101106
if (right.slice(tempRightIndex).length > 0) {
102107
let moreRight = right.slice(tempRightIndex);
103-
console.log("MoRe right " + moreRight);
104108
for (let i = 0; i < moreRight.length; i++) {
109+
console.log("MoRe right " + moreRight[i] + " to place " + counter*85);
105110
testing[counter] = moreRight[i];
106-
107-
viewer.liftElements(testing.indexOf(moreRight[i]), testing.indexOf(moreRight[i]));
108-
viewer.deselectPivotElement(copyArray.indexOf(moreRight[i]));
111+
viewer.moveElementToPlace(moreRight[i], counter*85);
112+
//viewer.liftElement(moreRight[i]);
113+
viewer.deselectPivotElement(moreRight[i]);
109114

110115
counter++;
111116
}
112117
}
113118
if (left.slice(tempLeftIndex).length > 0) {
114119
let moreLeft = left.slice(tempLeftIndex);
115-
console.log("MoRe left " + moreLeft);
116120
for (let i = 0; i < moreLeft.length; i++) {
121+
console.log("MoRe right " + moreLeft[i] + " to place " + counter*85);
117122
testing[counter] = moreLeft[i];
118-
119-
viewer.liftElements(testing.indexOf(moreLeft[i]), testing.indexOf(moreLeft[i]));
120-
viewer.deselectPivotElement(copyArray.indexOf(moreLeft[i]));
123+
viewer.moveElementToPlace(moreLeft[i], counter*85);
124+
//viewer.liftElement(moreLeft[i]);
125+
viewer.deselectPivotElement(moreLeft[i]);
121126
counter++;
122127
}
123128
}

MergeSort/js/eventManager.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
66
var eventManager = /** @class */ (function () {
77
function eventManager() {
8-
this.delayTime = 500; // Original value
8+
this.delayTime = 1000; // Original value
99
this.nextEvents = [];
1010
this.previousEvents = [];
1111
}

MergeSort/js/eventManager.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ declare var $;
77

88
/** Manager for events stored in queue. Manager is also responsible for executing events automatically */
99
class eventManager {
10-
delayTime: number = 500; // Original value
10+
delayTime: number = 1000; // Original value
1111
nextEvents: FrontendEvent[] = [];
1212
previousEvents: FrontendEvent[] = [];
1313
eventThread: number;

MergeSort/js/initArray.js

+3-3
Original file line numberDiff line numberDiff line change
@@ -51,8 +51,8 @@ function setMyArray(jsonArray) {
5151
});
5252
for (var i = 0; i < array.length; i++) {
5353
$("#indices").append("<p id='ind" + i + "' >" + i + "</p>");
54-
$("#arrayUl").append("<li id='insElemNr" + i + "'><div>" + array[i] + "</div></li>");
55-
arrayElements.push(new ArrayElement(i));
54+
$("#arrayUl").append("<li id='insElemNr" + array[i] + "'><div>" + array[i] + "</div></li>");
55+
arrayElements.push(new ArrayElement(array[i]));
5656
}
5757
// Spreading elements horizontally
5858
$(document).ready(function () {
@@ -106,7 +106,7 @@ function getArray(ran) {
106106
array = setAlmostSortedArray();
107107
}
108108
else {
109-
array = ('14|17|19|18|7|17|15|5');
109+
array = [14, 11, 19, 18, 7, 17, 15, 5];
110110
}
111111
if (checkDupli(array)) {
112112
return getArray(ran);

MergeSort/js/initArray.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -69,8 +69,8 @@ function setMyArray(jsonArray : string) {
6969

7070
for (var i = 0; i < array.length; i++) {
7171
$("#indices").append("<p id='ind" + i + "' >" + i + "</p>");
72-
$("#arrayUl").append("<li id='insElemNr" + i + "'><div>" + array[i] + "</div></li>");
73-
arrayElements.push(new ArrayElement(i));
72+
$("#arrayUl").append("<li id='insElemNr" + array[i] + "'><div>" + array[i] + "</div></li>");
73+
arrayElements.push(new ArrayElement(array[i]));
7474
}
7575

7676
// Spreading elements horizontally
@@ -134,7 +134,7 @@ function getArray(ran) {
134134
array = setAlmostSortedArray();
135135
}
136136
else { // If page is tested in another browser
137-
array = ('14|17|19|18|7|17|15|5');
137+
array = [14, 11, 19, 18, 7, 17, 15, 5];
138138
}
139139

140140
if (checkDupli(array)) {

MergeSort/js/methods.js

+26-63
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,18 @@
22
///<reference path="arrowMethods.ts"/>
33
var insElemNr = "insElemNr";
44
var LEVEL_HEIGHT = 85;
5-
function lowerElements(start, end) {
5+
function lowerElement(element) {
66
var newTop;
7-
for (var i = 0; i < array.length; i++) {
8-
if (i >= start && i <= end) {
9-
var $elem = $("#" + insElemNr + i);
10-
newTop = parseInt($elem.css('top'), 10) + LEVEL_HEIGHT;
11-
$elem.animate({ top: newTop + "px" }, 300);
12-
}
13-
}
7+
var $elem = $("#" + insElemNr + element);
8+
newTop = parseInt($elem.css('top'), 10) + LEVEL_HEIGHT;
9+
$elem.animate({ top: newTop + "px" }, 500);
1410
lowerArrows(300);
1511
}
16-
function liftElements(start, end) {
17-
for (var i = 0; i < array.length; i++) {
18-
if (i >= start && i <= end) {
19-
var $elem = $("#" + insElemNr + i);
20-
//Test to check if it should stop going up, might need a var instead of number
21-
if ($elem.offset().top > 168) {
22-
var newTop = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
23-
$elem.animate({ top: newTop + "px" }, 300);
24-
}
25-
}
12+
function liftElement(element) {
13+
var $elem = $("#" + insElemNr + element);
14+
if ($elem.offset().top > 170) {
15+
var newTop = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
16+
$elem.animate({ top: newTop + "px" }, 500);
2617
}
2718
liftArrows(300);
2819
}
@@ -71,52 +62,24 @@ function clearScreen() {
7162
function setLevelHeight(height) {
7263
LEVEL_HEIGHT = height;
7364
}
74-
function moveElementToPlace(element, end, moveTo, rest) {
65+
function moveElementToPlace(element, px) {
7566
console.log("--------------------------------------------------------");
76-
console.log("elem " + element + " end " + end + " moveTo " + moveTo);
77-
var swap = true;
78-
var place = moveTo;
79-
var steps = element - moveTo;
80-
if (element != moveTo) {
81-
for (var i = element; i <= end; i++) {
82-
if (i == element && swap) {
83-
swap = false;
84-
console.log("swap me");
85-
var $elem = $("#" + insElemNr + i);
86-
var moveLeft = $("#" + insElemNr + moveTo).css("left");
87-
console.log(moveLeft);
88-
$("#" + insElemNr + moveTo).attr("id", insElemNr + 100);
89-
$("#" + insElemNr + element).attr("id", insElemNr + moveTo);
90-
$elem.animate({ left: moveLeft }, 500);
91-
i = place - 1;
92-
}
93-
else if (steps == 1 || steps == -1) {
94-
console.log("steps == 1");
95-
var $elem = $("#" + insElemNr + 100);
96-
var moveLeft = $elem.css("left");
97-
var move = (((Number)(moveLeft.substring(0, moveLeft.length - 2))) + 85);
98-
$elem.attr("id", insElemNr + element);
99-
$elem.animate({ left: move + "px" }, 500);
100-
break;
101-
}
102-
else if (place == end) {
103-
console.log("i == end-1");
104-
var $elem = $("#" + insElemNr + 100);
105-
var moveLeft = $elem.css("left");
106-
var move = (((Number)(moveLeft.substring(0, moveLeft.length - 2))) + 85);
107-
$elem.attr("id", insElemNr + place);
108-
$elem.animate({ left: move + "px" }, 500);
109-
}
110-
else if (i < end - 1) {
111-
console.log("else" + i);
112-
var $elem = $("#" + insElemNr + 100);
113-
var moveLeft = $elem.css("left");
114-
var move = (((Number)(moveLeft.substring(0, moveLeft.length - 2))) + 85);
115-
$("#" + insElemNr + i).attr("id", insElemNr + 100);
116-
$elem.attr("id", insElemNr + i);
117-
$elem.animate({ left: move + "px" }, 500);
118-
}
119-
place++;
67+
var $elem = $("#" + insElemNr + element);
68+
var moveLeft = $elem.css("left");
69+
var pos = (Number)(moveLeft.substring(0, moveLeft.length - 2));
70+
console.log(pos + " " + px);
71+
if (pos > px) {
72+
if ($elem.offset().top > 170) {
73+
var newTop = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
74+
$elem.animate({ top: newTop + "px" }, 500);
75+
}
76+
$elem.animate({ left: px + "px" }, 1000);
77+
}
78+
else {
79+
$elem.animate({ left: px + "px" }, 1000);
80+
if ($elem.offset().top > 170) {
81+
var newTop = parseInt($elem.css('top'), 10) - LEVEL_HEIGHT;
82+
$elem.animate({ top: newTop + "px" }, 500);
12083
}
12184
}
12285
}

0 commit comments

Comments
 (0)