[JS]算法总结
一、冒泡排序
function bubbleSort(arr){
for(var i=1;i<arr.length;i++){//共需要多少轮
for(var j=0;j<arr.length-i;j++){//每i轮过后,都有最后i个数无需再排序,即第1轮过后,最后一个数最大,第2轮过后,最后两个数最大
if(arr[j]>arr[j+1]){//如果前一个数大于后一个,则交换二者的值
arr[j+1]=[arr[j],arr[j]=arr[j+1]][0];
}
}
}
console.log(arr);
}
sort();
二、快速排序
function quickSort(arr){
if(arr.length<=1){
return arr;
}
var pivotIndex = Math.floor(arr.length/2);//取基准点
var pivot = arr.splice(pivotIndex,1)[0];//从数组中取出基准点所在的数
var left = [];
var 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 insertionSort(arr){
for (var i = 1; i < arr.length; i++) {//从第2个数开始排序
for (var j = i; j > 0; j--) {//从后往前查找
if (arr[j - 1] > arr[j]) {//如果前一个数大于后一个数,交换二者的值
arr[j]=[arr[j-1],arr[j-1]=arr[j]][0];
} else {
break;
}
}
}
return arr;
}
四、二分查找插入排序
function binaryInsertionSort(array) {
for (var i = 1; i < array.length; i++) {
var key = array[i], left = 0, right = i - 1;
while (left <= right) {
var middle = parseInt((left + right) / 2);
if (key < array[middle]) {
right = middle - 1;
} else {
left = middle + 1;
}
}
for (var j = i - 1; j >= left; j--) {
array[j + 1] = array[j];
}
array[left] = key;
}
return array;
}
五、选择排序
function selectionSort(arr) {
for (var i = 0,len=arr.length; i < len - 1; i++) {//n个数需要n-1次排序
for (var j = i + 1; j < len; j++) {//从i之后的一个数开始遍历
if (arr[j] < arr[i]) {//找到最小的那个数,然后与arr[i]交换值
arr[i]=[arr[j],arr[j]=arr[i]][0];
}
}
}
return arr;
}
参考链接:
http://www.cnblogs.com/beli/p/6297741.html
http://www.cnblogs.com/ywang1724/p/3946339.html