1,冒泡排序。
顾名思义,就是从头开始,每两个相邻元素相互比较,把大的放后面,这样子经过一次循环,最大的数就被冒泡到最后面了。下一次循环也是这样,只是需要循环的长度减一(排除最后一个数字)
function bubbleSort(arr){
var len = arr.length;
for(var i = 0; i < len; i++){
for(var j = 0; j < len - 1 - i; j++){
if(arr[j] > arr[j+1]){
var tmp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = tmp;
}
}
}
return arr;
}
2,选择排序。就是每次从头到尾寻找一个最小的数字,把他放到最前面,下一次循环也是这样,循环长度减1(去掉最前面的最小数)
function selectSort(arr){
var minIndex,len = arr.length;
for(var i = 0; i < len - 1; i++){
minIndex = i;
for(var j = i + 1; j < len; j++){
if(arr[j] < arr[minIndex]){
minIndex = j;
}
}
var tmp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = tmp;
}
return arr;
}
3,选择排序。就跟打扑克一样,从左到右,每次把当前的数字跟前面的比较,比他小就插到他前面。在代码中就是先用current表示当前数字,跟他前面的数字比较,比他小就把前面的数字往后放一位,这样,就空出来一个位置。当前面的数字比current小,就把current放到空出来的位置。
function insertSort(arr){
var len = arr.length,
current;
for(var i = 1; i < len; i++){
current = arr[i];
for(var j = i - 1; j >= 0; j--){
if(arr[j] > current){
arr[j+1] = arr[j];
}else{
arr[j+1] = current;
break;
}
}
}
return arr;
}
4,快速排序,就是选择一个数字,一般选中间的数midValue,数组中比他小的放进left数组,比他大的放在right数组中。递归调用,若是数组长度小于2,直接返回数组。最后将left和midValue和right拼接起来。
function quickSort(arr){
var len = arr.length;
if(len < 2){
return arr;
}
var midIndex = Math.floor(len/2);
var midValue = arr.splice(midIndex,1);
var left = [],
right = [];
arr.forEach(function(v){
if(v < midValue){
left.push(v);
}else{
right.push(v);
}
});
return quickSort(left).concat(midValue, quickSort(right));
}