Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
06910a7
commit 52e07cc
Showing
4 changed files
with
165 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,61 @@ | ||
"use strict"; | ||
if (typeof define !== 'function') { var define = require('amdefine')(module) } | ||
|
||
define([], function() { | ||
|
||
var split = function(list) { | ||
var halfsize = Math.floor(list.length / 2); | ||
var left = list.splice(0, halfsize); | ||
var right = list; | ||
return { | ||
left: left, | ||
right: right | ||
} | ||
}; | ||
|
||
var merge = function(left, right, compare) { | ||
var merged = []; | ||
var leftLength = left.length; | ||
var rightLength = right.length; | ||
var leftIndex = 0; | ||
var rightIndex = 0; | ||
while (leftIndex < leftLength && rightIndex < rightLength) { | ||
if (compare(left[leftIndex], right[rightIndex]) <= 0) { // item in left is smaller or equal | ||
merged.push(left[leftIndex]); | ||
leftIndex++; | ||
} else { | ||
merged.push(right[rightIndex]); | ||
rightIndex++; | ||
} | ||
} | ||
|
||
while (leftIndex < leftLength) { | ||
merged.push(left[leftIndex]); | ||
leftIndex++; | ||
} | ||
|
||
while (rightIndex < rightLength) { | ||
merged.push(right[rightIndex]); | ||
rightIndex++; | ||
} | ||
|
||
return merged; | ||
}; | ||
|
||
var mergesort = function(list, compare) { | ||
if (list.length <= 1) { | ||
return list; | ||
} else { | ||
var sublists = split(list); | ||
var sublistleft = sublists.left; | ||
var sublistright = sublists.right; | ||
|
||
var left = mergesort(sublistleft, compare); | ||
var right = mergesort(sublistright, compare); | ||
|
||
return merge(left, right, compare); | ||
} | ||
}; | ||
|
||
return mergesort; | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
<!DOCTYPE html> | ||
<html> | ||
<head> | ||
<title>Performance/Memory test page for mergesortArray.js</title> | ||
<script type="text/javascript" src="../../../vendor/require-1.0.7/require.js"></script> | ||
</head> | ||
|
||
<body> | ||
<script type="text/javascript"> | ||
require.config({ | ||
baseUrl: './' | ||
}); | ||
|
||
require(['../../../lib/algorithm/mergesortArray.js'], function(mergesort) { | ||
var compareNumbers = function(a, b) { | ||
if (a < b) { | ||
return -1; | ||
} | ||
if (a === b) { | ||
return 0; | ||
} | ||
if (a > b) { | ||
return 1; | ||
} | ||
}; | ||
|
||
var items = []; | ||
for (var i = 0; i < 1000000; i++) { | ||
items.push(Math.floor(Math.random() * 1000000)); | ||
} | ||
|
||
var start = new Date().getTime(); | ||
var sorted = mergesort(items, compareNumbers); | ||
var end = new Date().getTime(); | ||
var time = end - start; | ||
window.alert(time); | ||
}); | ||
</script> | ||
</body> | ||
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
"use strict"; | ||
if (typeof define !== 'function') { var define = require('amdefine')(module) } | ||
|
||
var compareNumbers = function(a, b) { | ||
if (a < b) { | ||
return -1; | ||
} | ||
if (a === b) { | ||
return 0; | ||
} | ||
if (a > b) { | ||
return 1; | ||
} | ||
}; | ||
|
||
define(["../../../lib/datastructure/Queue", "../../../lib/algorithm/mergesortArray"], function(Queue, mergesort) { | ||
var compareNumbers = function(a, b) { | ||
if (a < b) { | ||
return -1; | ||
} | ||
if (a === b) { | ||
return 0; | ||
} | ||
if (a > b) { | ||
return 1; | ||
} | ||
}; | ||
|
||
var items = []; | ||
for (var i = 0; i < 10000000; i++) { | ||
items.push(Math.floor(Math.random() * 10000000)); | ||
} | ||
|
||
var start = new Date().getTime(); | ||
var sorted = mergesort(items, compareNumbers); | ||
var end = new Date().getTime(); | ||
var time = end - start; | ||
console.log(time); | ||
}); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
"use strict"; | ||
if (typeof define !== 'function') { var define = require('amdefine')(module) } | ||
|
||
var compareNumbers = function(a, b) { | ||
if (a < b) { | ||
return -1; | ||
} | ||
if (a === b) { | ||
return 0; | ||
} | ||
if (a > b) { | ||
return 1; | ||
} | ||
}; | ||
|
||
define(["../../lib/algorithm/mergesortArray"], function(mergesort) { | ||
describe("mergesort", function() { | ||
it("correctly sorts", function() { | ||
var unsorted = [4, 9, 7, 8, 1, 9]; | ||
|
||
var sorted = mergesort(unsorted, compareNumbers); | ||
expect(sorted.join("")).toEqual("147899"); | ||
}); | ||
}); | ||
}); |