Array.prototype.swap = function(i, j){
var temp = this[i];
this[i] = this[j];
this[j] = temp;
}
/* 快速排序 */
function quickSort(arr){
if(arr.length <= 1) return arr;
var pivotIndex = Math.floor(arr.length/2)
, pivot = arr.splice(pivotIndex, 1)[0]
, left = []
, right = [];
for(var i = 0; i < arr.length; i++){
if(arr[i] < pivot){
left.push(arr[i]);
}else{
right.push(arr[i]);
}
}
return quickSort(left).concat([pivot], quickSort(right));
}
/* 插入排序 */
function insertSort(arr){
var len = arr.length
, i = 1
, j, key;
for(; i < len; i++){
j = i;
key = arr[j];
while(--j > -1){
if(arr[j] > key){
arr[j + 1] = arr[j];
}else{
break;
}
}
arr[j + 1] = key;
}
return arr;
}
/* 冒泡排序 */
function bubbleSort(arr){
var len = arr.length
, i, j;
for(i = len - 1; i >= 1; i--){
for(j = 0; j <= i - 1; j++){
if(arr[j] > arr[j + 1]){
d = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = d;
}
}
}
return arr;
}
/* 堆排序 */
function heapSort(arr){
for(var i = 1; i < arr.length; ++i){
for (var j = i, k = (j - 1) >> 1; k >= 0; j = k, k = (k - 1) >> 1){
if(arr[k] >= arr[j]) break;
arr.swap(j, k);
}
}
for(var i = arr.length - 1; i > 0; --i){
arr.swap(0, i);
for(var j = 0, k = (j + 1) << 1; k <= i; j = k, k = (k + 1) << 1){
if(k == i || arr[k] < arr[k - 1]) --k;
if(arr[k] <= arr[j]) break;
arr.swap(j, k);
}
}
return arr;
}
/* 希尔排序 */
function ShellSort(arr){ //插入排序->希儿排序
var st = new Date();
var increment = arr.length;
do {
increment = (increment/3|0) + 1;
arr = ShellPass(arr, increment);
}
while (increment > 1)
status = (new Date() - st) + ' ms';
return arr;
}
function ShellPass(arr, d){ //希儿排序分段执行函数
var temp, j;
for(var i = d; i < arr.length; i++) {
if((arr[i]) < (arr[i-d])) {
temp = arr[i]; j = i - d;
do {
arr[j+d] = arr[j];
j = j-d;
}
while (j >- 1 && (temp) < (arr[j]));
arr[j + d] = temp;
}
}
return arr;
}
转载于:https://my.oschina.net/wolfx/blog/618370