1+ /*
2+ Wikipedia says: Comb sort improves on bubble sort.
3+
4+ The basic idea is to eliminate turtles, or small values
5+ near the end of the list, since in a bubble sort these slow the sorting
6+ down tremendously. Rabbits, large values around the beginning of the list,
7+ do not pose a problem in bubble sort.
8+
9+ In bubble sort, when any two elements are compared, they always have a
10+ gap (distance from each other) of 1. The basic idea of comb sort is
11+ that the gap can be much more than 1. The inner loop of bubble sort,
12+ which does the actual swap, is modified such that gap between swapped
13+ elements goes down (for each iteration of outer loop) in steps of
14+ a "shrink factor" k: [ n/k, n/k2, n/k3, ..., 1 ].
15+
16+ */
17+ function combSort ( list ) {
18+
19+
20+ if ( list . length === 0 ) {
21+ return list ;
22+ }
23+ let shrink = 1.3 ;
24+ let gap = list . length ;
25+ let isSwapped = true ;
26+ let i = 0
27+
28+ while ( gap > 1 || isSwapped ) {
29+ // Update the gap value for a next comb
30+ gap = parseInt ( parseFloat ( gap ) / shrink , 10 ) ;
31+
32+ isSwapped = false
33+ i = 0
34+
35+ while ( gap + i < list . length ) {
36+ if ( list [ i ] > list [ i + gap ] ) {
37+
38+ let value = list [ i ] ;
39+ list [ i ] = list [ i + gap ] ;
40+ list [ i + gap ] = value ;
41+ isSwapped = true ;
42+ }
43+ i += 1
44+ }
45+ }
46+ return list
47+ }
48+ let arrOrignal = [ 5 , 6 , 7 , 8 , 1 , 2 , 12 , 14 ] ;
49+ //Array before Sort
50+ console . log ( arrOrignal ) ;
51+ arrSorted = combSort ( arrOrignal ) ;
52+ //Array after sort
53+ console . log ( arrSorted ) ;
0 commit comments