In bubble sort, when any two elements are compared, they always have a gap (distance from each other) of 1. The basic idea of comb sort is that the gap can be much more than one. The gap starts out at the length of the list being sorted divided by the shrink factor (generally 1.3; see below), and the list is sorted with that value for the gap. Then the gap is divided by the shrink factor again, the list is sorted with this new gap, and the process repeats until the shrink factor is 1. At this point, comb sort performs the final sort in the same manner. The final sort is thus equivalent to a bubble sort, but by this time most turtles have been dealt with, so a bubble sort will be efficient.
The shrink factor has a great effect on the efficiency of comb sort. In the original article (http://cs.clackamas.cc.or.us/molatore/cs260Spr01/combsort.htm), the authors suggested 1.3 after trying some random lists and finding it to be generally the most effective. A value too small slows the algorithm down because more comparisons must be made, whereas a value too large may not kill enough turtles to be practical.
http://world.std.com/~jdveale/combsort.htm describes an improvement to comb sort using the base value 1.279604943109628 as the shrink factor. It also contains a pseudocode implementation with a pre-defined gap table.
With a shrink factor around 1.3, there are only three possible ways for the list of gaps to end: (9, 6, 4, 3, 2, 1), (10, 7, 5, 3, 2, 1), or (11, 8, 6, 4, 3, 2, 1). Only the last of those endings kills all turtles before the gap becomes 1. Therefore, significant speed improvements can be made if the gap is set to 11 whenever it would otherwise become 9 or 10. This variation is called Combsort11.
Search Encyclopedia
|
Featured Article
|