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