js三种排序算法分享

代码如下:

/** 
* 值交换操作 
* arr 被操作的数组 
* i 被操作元素索引值 
* j 被操作两元素的距离 
*/ 
function refer(arr, i, j){ 
var change = (arr[i] - arr[i - j]) < 0 ? true : false, value; 
if (change) { 
value = arr[i]; 
arr[i] = arr[i - j]; 
arr[i - j] = value; 
return arguments.callee(arr, i - j, j); 
} 
else { 
return arr; 
} 
} 
//插入排序 
function insert(array){ 
for (var i = 1, len = array.length; i < len; i++) { 
if (array[i] < array[i - 1]) { 
refer(array, i, 1); 
} 
} 
return array; 
}

上面的部分是插入排序,然后是希尔排序:

代码如下:

//希尔排序 
function shell(array){ 
var length = array.length, value; 
for (var i = Math.floor(length / 2); i > 0; i = Math.floor(i / 2)) { 
for (var j = i; j < length; j++) { 
if (array[j] < array[j - i]) { 
refer(array, j, i); 
} 
else { 
continue; 
} 
} 
} 
return array; 
}

两种方法当中用到的refer方法为同一个方法。最后是归并排序:

代码如下:

//归并排序 
function order(arr1, arr2){ 
var arrLong = arr1.length > arr2.length ? arr1 : arr2; 
var arrShort = arr1.length <= arr2.length ? arr1 : arr2 
var arr = []; 
for (var i = 0, l = arrShort.length; i < l; i++) { 
for (var j = 0, len = arrLong.length; j < len; j++) { 
if (arrShort[i] < arrLong[j]) { 
arr.push(arrShort[i]); 
if (i == l - 1) { 
for (var m = 0, n = arrLong.length; m < n; m++) { 
    arr[arr.length] = arrLong[m]; 
     } 
      } 
      break; 
    } 
else { 
arr.push(arrLong[j]); 
arrLong.shift(); 
continue; 
} 
} 
} 
return arr; 
}

有好建议的同学可以留言!在此不多余赘述了,一切看代码吧。

相关推荐