Skip to content

Commit 20057a9

Browse files
committed
Added odd even sort algorithm
1 parent 4dfd3e9 commit 20057a9

File tree

2 files changed

+65
-0
lines changed

2 files changed

+65
-0
lines changed

src/sorting/oddeven-sort.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
(function (exports) {
2+
'use strict';
3+
4+
/**
5+
* Odd even sort algorithm.<br><br>
6+
* Complexity: O(N^2).
7+
*
8+
* @example
9+
* var sort = require('path-to-algorithms/src/' +
10+
* 'sorting/oddeven-sort').oddEvenSort;
11+
* console.log(sort([2, 5, 1, 0, 4])); // [ 0, 1, 2, 4, 5 ]
12+
*
13+
* @public
14+
* @module sorting/oddeven-sort
15+
* @param {Array} array Input array.
16+
* @return {Array} Sorted array.
17+
*/
18+
function oddEvenSort(arr) {
19+
function swap(arr, i, j) {
20+
var temp = arr[i];
21+
arr[i] = arr[j];
22+
arr[j] = temp;
23+
}
24+
25+
var sorted = false;
26+
while (!sorted) {
27+
sorted = true;
28+
for (var i = 1; i < arr.length - 1; i += 2) {
29+
if (arr[i] > arr[i + 1]) {
30+
swap(arr, i, i + 1);
31+
sorted = false;
32+
}
33+
}
34+
35+
for (i = 0; i < arr.length - 1; i += 2) {
36+
if (arr[i] > arr[i + 1]) {
37+
swap(arr, i, i + 1);
38+
sorted = false;
39+
}
40+
}
41+
}
42+
return arr;
43+
}
44+
45+
exports.oddEvenSort = oddEvenSort;
46+
47+
})(typeof window === 'undefined' ? module.exports : window);

test/sorting/oddeven-sort.spec.js

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
var oes =
2+
require('../../src/sorting/oddeven-sort').oddEvenSort;
3+
4+
describe('oddeven-sort', function () {
5+
'use strict';
6+
7+
it('should sort the empty array', function () {
8+
expect(oes([])).toEqual([]);
9+
});
10+
11+
it('should return array with the same count of elements', function () {
12+
expect(oes([2, 3, 4]).length).toBe(3);
13+
});
14+
15+
it('should sort the given array in ascending order', function () {
16+
expect(oes([42, 3, 10])).toEqual([3, 10, 42]);
17+
});
18+
});

0 commit comments

Comments
 (0)