Skip to content

Commit fad0f53

Browse files
committed
Merge pull request #46 from nitinsaroha/selection_sort
Added Selection Sort
2 parents 0e6fe75 + 8eca6d8 commit fad0f53

File tree

3 files changed

+88
-1
lines changed

3 files changed

+88
-1
lines changed

algorithms/sorting/selection_sort.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
/**
2+
* Copyright (C) 2014 Nitin Saroha
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to
6+
* deal in the Software without restriction, including without limitation the
7+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8+
* sell copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in
12+
* all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20+
* IN THE SOFTWARE.
21+
*/
22+
'use strict';
23+
/**
24+
* Selection sort algorithm O(n^2)
25+
*/
26+
var selectionSort = function (a) {
27+
var n = a.length;
28+
for (var i = 0; i < n - 1; i++) {
29+
var min = i;
30+
for (var j = i + 1; j < n; j++) {
31+
if (a[min] > a[j])
32+
min = j;
33+
}
34+
if (min != i) {
35+
var tmp = a[i];
36+
a[i] = a[min];
37+
a[min] = tmp;
38+
}
39+
}
40+
41+
return a;
42+
};
43+
44+
module.exports = selectionSort;

main.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,8 @@ var lib = {
4646
countingSort: require('./algorithms/sorting/counting_sort'),
4747
heapSort: require('./algorithms/sorting/heap_sort'),
4848
mergeSort: require('./algorithms/sorting/merge_sort'),
49-
quicksort: require('./algorithms/sorting/quicksort')
49+
quicksort: require('./algorithms/sorting/quicksort'),
50+
selectionSort: require('./algorithms/sorting/selection_sort')
5051
},
5152
String: {
5253
editDistance: require('./algorithms/string/edit_distance'),
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
/**
2+
* Copyright (C) 2014 Nitin Saroha
3+
*
4+
* Permission is hereby granted, free of charge, to any person obtaining a copy
5+
* of this software and associated documentation files (the "Software"), to
6+
* deal in the Software without restriction, including without limitation the
7+
* rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
8+
* sell copies of the Software, and to permit persons to whom the Software is
9+
* furnished to do so, subject to the following conditions:
10+
*
11+
* The above copyright notice and this permission notice shall be included in
12+
* all copies or substantial portions of the Software.
13+
*
14+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19+
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20+
* IN THE SOFTWARE.
21+
*/
22+
'use strict';
23+
24+
var selectionSort = require('../../../algorithms/sorting/selection_sort'),
25+
assert = require('assert');
26+
27+
describe('Selection Sort', function () {
28+
it('should sort the given array', function () {
29+
assert.deepEqual(selectionSort([]), []);
30+
assert.deepEqual(selectionSort([1]), [1]);
31+
assert.deepEqual(selectionSort([2, 1]), [1, 2]);
32+
assert.deepEqual(selectionSort([3, 1, 2]), [1, 2, 3]);
33+
assert.deepEqual(selectionSort([1, 2, 3, 4, 5, 6]), [1, 2, 3, 4, 5, 6]);
34+
assert.deepEqual(selectionSort([6, 5, 4, 3, 2, 1]), [1, 2, 3, 4, 5, 6]);
35+
assert.deepEqual(selectionSort([1, 295, 3, 6, 8, 10, 10, 20, 0, 5]),
36+
[0, 1, 3, 5, 6, 8, 10, 10, 20, 295]);
37+
assert.deepEqual(selectionSort(['a', 'A', 'b', 'Z']), ['A', 'Z', 'a', 'b']);
38+
assert.deepEqual(selectionSort(['hi', 'everybody']), ['everybody', 'hi']);
39+
40+
});
41+
42+
});

0 commit comments

Comments
 (0)