冒泡排序
基本思路:
1.依次比较相邻的两个数,如果第一个比第二个小,不变。如果第一个比第二个大,调换顺序。一轮下来,最后一个是最大的数
2.对除了最后一个之外的数重复第一步,直到只剩一个数
function bubbleSort(arr){
var len = arr.length;
for (var i = 0; i < len - 1; i++){
for (var j = 0, stop = len - 1 - i; j < stop; j++){
if (arr[j] > arr[j + 1]){
swap(arr, j, j + 1);
}
}
}
return arr;
}
function swap(arr, p1, p2){
var temp = arr[p1];
arr[p1] = arr[p2];
arr[p2] = temp;
}
快速排序
基本思路:
1.以一个数为基准(中间的数),比基准小的放到左边,比基准大的放到右边
2.再按此方法对这两部分数据分别进行快速排序(递归进行)
3.不能再分后退出递归,并重新将数组合并
function quickSort(arr){
if(arr.length<=1)
{
return arr;//如果数组只有一个数,就直接返回;
}
var num = Math.floor(arr.length/2);//找到中间数的索引值,向下取整
var numValue = arr.splice(num,1);//找到中间数的值,并从原数组删除
var left =[]; var right =[];
for(var i=0;i<arr.length;i++){
left.push(arr[i]);//基准点的左边的数传到左边数组
}else{
right.push(arr[i]);//基准点的右边的数传到右边数组}
}
return arguments.callee(left).concat(numValue,arguments.callee(right));//递归不断重复比较}
选择排序
基本思路:
1.找出最小的数,和第一个交换位置
2.在剩下的数中,找出最二小的数,放在第二个
3.依次类推,排出顺序
function selectionSort(arr){
var len=arr.length,min=0;
for(i=0;i<len;i++){
min=i;
for(j=i+1;j<len;j++){
if (arr[j]<arr[min]){
min=j;
}
}
if(i!=min){
swap(arr,i,min);
}
}
return arr;
}
function swap(arr,p1,p2){
var temp=arr[p1];
arr[p1]=arr[p2];
arr[p2]=temp;
}
插入排序
基本思路:
1.把数组分为[已排序]和[未排序]两部分,第一个数为[已排序],其余为[未排序]
2.从[未排序]抽出第一个数,和[已排序]部分比较,插入到合适的位置
function insertionSort(arr){
var len=arr.length,// 数组的长度
value,// 当前比较的值
for(i=0;i<len;i++){
value=arr[i];
/*
* 当已排序部分的当前元素大于value, 就将当前元素向后移一位,再将前一位与value比较
*/
for(j=i-1;j>-1&&arr[j]>value;j--){
arr[j+1]=arr[j];
}
arr[j+1]=value;
return arr;
}