Skip to content

Commit 097d09d

Browse files
committedMar 24, 2016
Add shellsort
1 parent 08871e2 commit 097d09d

File tree

2 files changed

+54
-0
lines changed

2 files changed

+54
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
// sample of arrays to sort
2+
var arrayRandom = [9, 2, 5, 6, 4, 3, 7, 10, 1, 8];
3+
var arrayOrdered = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
4+
var arrayReversed = [10, 9, 8, 7, 6, 5, 4, 3, 2, 1];
5+
6+
// gaps
7+
var gaps = [701, 301, 132, 57, 23, 10, 4, 1];
8+
9+
function shellsort(array) {
10+
var countOuter = 0;
11+
var countInner = 0;
12+
var countSwap = 0;
13+
14+
for(var g = 0; g < gaps.length; g++) {
15+
var gap = gaps[g];
16+
for(var i = gap; i < array.length; i++) {
17+
countOuter++;
18+
var temp = array[i];
19+
for(var j = i; j >= gap && array[j - gap] > temp; j -= gap) {
20+
countInner++;
21+
countSwap++;
22+
array[j] = array[j - gap];
23+
}
24+
array[j] = temp;
25+
}
26+
}
27+
console.log('outer:', countOuter, 'inner:', countInner, 'swap:', countSwap);
28+
return array;
29+
}
30+
31+
shellsort(arrayRandom.slice()); // => outer: 15 inner: 11 swap: 11
32+
shellsort(arrayOrdered.slice()); // => outer: 15 inner: 0 swap: 0
33+
shellsort(arrayReversed.slice()); // => outer: 15 inner: 13 swap: 13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
// array to sort
2+
var array = [9, 2, 5, 6, 4, 3, 7, 10, 1, 8];
3+
4+
// gaps
5+
var gaps = [701, 301, 132, 57, 23, 10, 4, 1];
6+
7+
function shellsort(array) {
8+
for(var g = 0; g < gaps.length; g++) {
9+
var gap = gaps[g];
10+
for(var i = gap; i < array.length; i++) {
11+
var temp = array[i];
12+
for(var j = i; j >= gap && array[j - gap] > temp; j -= gap) {
13+
array[j] = array[j - gap];
14+
}
15+
array[j] = temp;
16+
}
17+
}
18+
return array;
19+
}
20+
21+
console.log(shellsort(array)); // => [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ]

0 commit comments

Comments
 (0)
Please sign in to comment.