parent
71a8ce0db0
commit
785c61e3a9
8 changed files with 206 additions and 33 deletions
@ -0,0 +1,29 @@ |
||||
/** |
||||
* |
||||
*/ |
||||
var Bubblesort = function() { |
||||
this.instructions = []; |
||||
}; |
||||
|
||||
Bubblesort.prototype = Object.create(Sorter.prototype); |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
Bubblesort.prototype.sort = function(arr) { |
||||
var i; |
||||
var swapped = false; |
||||
var len = arr.length; |
||||
|
||||
for (i = 1; i < len; i++) { |
||||
if (arr[i - 1].value > arr[i].value) { |
||||
this.swap(arr, i, i - 1); |
||||
swapped = true; |
||||
console.log(dump(arr)); |
||||
} |
||||
} |
||||
|
||||
if (swapped === true) { |
||||
this.sort(arr); |
||||
} |
||||
}; |
@ -0,0 +1,36 @@ |
||||
/** |
||||
* |
||||
*/ |
||||
var Insertionsort = function() { |
||||
this.instructions = []; |
||||
}; |
||||
|
||||
Insertionsort.prototype = Object.create(Sorter.prototype); |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
Insertionsort.prototype.sort = function(arr) { |
||||
var len = arr.length; |
||||
var i; |
||||
var j; |
||||
var tmp; |
||||
var swaps = 0; |
||||
var comparisons = 0; |
||||
|
||||
for (i = 0; i < len; i++) { |
||||
for (j = i; j > 0; j--) { |
||||
comparisons++; |
||||
|
||||
if (arr[j - 1].value > arr[j].value) { |
||||
swaps++; |
||||
tmp = arr[j - 1]; |
||||
arr[j - 1] = arr[j]; |
||||
arr[j] = tmp; |
||||
} |
||||
else { |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
}; |
@ -0,0 +1,40 @@ |
||||
/** |
||||
* |
||||
*/ |
||||
var Selectionsort = function() { |
||||
this.instructions = []; |
||||
}; |
||||
|
||||
Selectionsort.prototype = Object.create(Sorter.prototype); |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
Selectionsort.prototype.sort = function(arr) { |
||||
var len = arr.length; |
||||
var i; |
||||
var j; |
||||
var tmp; |
||||
var swaps = 0; |
||||
var comparisons = 0; |
||||
var min; |
||||
|
||||
for (i = 0; i < len; i++) { |
||||
min = i; |
||||
for (j = i + 1; j < len; j++) { |
||||
comparisons++; |
||||
if (arr[j].value < arr[i].value) { |
||||
min = j; |
||||
} |
||||
} |
||||
|
||||
if (min !== i) { |
||||
swaps++; |
||||
tmp = arr[i]; |
||||
arr[i] = arr[min]; |
||||
arr[min] = tmp; |
||||
} |
||||
} |
||||
|
||||
console.info(`swaps: ${swaps}, comparisons: ${comparisons} `); |
||||
}; |
@ -0,0 +1,55 @@ |
||||
/** |
||||
* |
||||
*/ |
||||
var Shellsort = function() { |
||||
this.instructions = []; |
||||
}; |
||||
|
||||
Shellsort.prototype = Object.create(Sorter.prototype); |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
Shellsort.prototype.sort = function(arr) { |
||||
var len = arr.length; |
||||
var gap = Math.floor(len / 3); |
||||
var i, j; |
||||
|
||||
for (i = 0; i < gap; i++) { |
||||
this.gapSort(arr, i, gap); |
||||
} |
||||
|
||||
var IS = new Insertionsort(); |
||||
IS.sort(arr); |
||||
}; |
||||
|
||||
/** |
||||
* |
||||
*/ |
||||
Shellsort.prototype.gapSort = function(arr, start, gap) { |
||||
var i, j; |
||||
var len = arr.length; |
||||
|
||||
console.log(`start ${start}, gap ${gap}`) |
||||
|
||||
for (i = start; i < len; i += gap) { |
||||
console.log(`i: ${i}`) |
||||
for (j = i; j > start; j -= gap) { |
||||
console.log(`j: ${j}`) |
||||
console.log(`checking if ${arr[j - gap].value} > ${arr[j].value}`) |
||||
|
||||
if (arr[j - gap].value > arr[j].value) { |
||||
console.log(`swapping ${arr[j - gap].value} and ${arr[j].value}`) |
||||
tmp = arr[j - gap]; |
||||
arr[j - gap] = arr[j]; |
||||
arr[j] = tmp; |
||||
console.log(dump(arr)); |
||||
} |
||||
else { |
||||
break; |
||||
} |
||||
} |
||||
} |
||||
|
||||
console.log(dump(arr)); |
||||
}; |
Loading…
Reference in new issue