mirror of
https://github.com/TheAlgorithms/JavaScript.git
synced 2025-07-05 16:26:47 +08:00
Merge pull request #65 from KuLi/combSort
Implemented comb sort algorithm
This commit is contained in:
53
Sorts/combSort.js
Normal file
53
Sorts/combSort.js
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
/*
|
||||||
|
Wikipedia says: Comb sort improves on bubble sort.
|
||||||
|
|
||||||
|
The basic idea is to eliminate turtles, or small values
|
||||||
|
near the end of the list, since in a bubble sort these slow the sorting
|
||||||
|
down tremendously. Rabbits, large values around the beginning of the list,
|
||||||
|
do not pose a problem in bubble sort.
|
||||||
|
|
||||||
|
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 1. The inner loop of bubble sort,
|
||||||
|
which does the actual swap, is modified such that gap between swapped
|
||||||
|
elements goes down (for each iteration of outer loop) in steps of
|
||||||
|
a "shrink factor" k: [ n/k, n/k2, n/k3, ..., 1 ].
|
||||||
|
|
||||||
|
*/
|
||||||
|
function combSort(list) {
|
||||||
|
|
||||||
|
|
||||||
|
if (list.length === 0) {
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
let shrink = 1.3;
|
||||||
|
let gap = list.length;
|
||||||
|
let isSwapped = true;
|
||||||
|
let i = 0
|
||||||
|
|
||||||
|
while (gap > 1 || isSwapped) {
|
||||||
|
// Update the gap value for a next comb
|
||||||
|
gap = parseInt(parseFloat(gap) / shrink, 10);
|
||||||
|
|
||||||
|
isSwapped = false
|
||||||
|
i = 0
|
||||||
|
|
||||||
|
while (gap + i < list.length) {
|
||||||
|
if (list[i] > list[i + gap]) {
|
||||||
|
|
||||||
|
let value = list[i];
|
||||||
|
list[i] = list[i + gap];
|
||||||
|
list[i + gap] = value;
|
||||||
|
isSwapped = true;
|
||||||
|
}
|
||||||
|
i += 1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return list
|
||||||
|
}
|
||||||
|
let arrOrignal = [5, 6, 7, 8, 1, 2, 12, 14];
|
||||||
|
//Array before Sort
|
||||||
|
console.log(arrOrignal);
|
||||||
|
arrSorted = combSort(arrOrignal);
|
||||||
|
//Array after sort
|
||||||
|
console.log(arrSorted);
|
Reference in New Issue
Block a user