|
| 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 |
0 commit comments