Javascript常用排序和算法

冒泡排序

核心思想:每次比较相邻的两个值,若后面的值比前面的值小,则交换位置,重复此操作,直到数据从小到大排列看起来像水泡一样冒上去了!

如何交换数据位置?

使用临时变量
1
2
3
4
5
6
7
8
9
var a=15;
var b=7;

var tmp;
tmp=a;
a=b;
b=tmp;

console.log('a是:'+a+', b是:'+b);
求和再相减
1
2
3
4
5
6
7
8
var a=19;
var b=10;

b=a+b; //俩人的和先求出来,然后分别算减法就行
a=b-a; //此时 b是总和 减去a其实就是b的结果
b=b-a; //同理

console.log('a是:'+a+', b是:'+b);
求和再相减2
1
2
3
4
5
6
var a=19;
var b=10;

a=a+b-(b=a); //简写 其实本质还是求和 相减

console.log('a是:'+a+', b是:'+b);
乘以0再对换
1
2
3
4
5
6
var a=19;
var b=10;

b=a+(a=b)*0; //这个直接换 其实就是 b=a a=b

console.log('a是:'+a+', b是:'+b);
相乘相除
1
2
3
4
5
6
7
8
var a=19;
var b=10;

a=a*b;
b=a/b;
a=a/b;

console.log('a是:'+a+', b是:'+b);
逻辑运算符
1
2
3
4
5
6
7
8
var a=19;
var b=10;

a=a^b;
b=a^b;
a=a^b;

console.log('a是:'+a+', b是:'+b);

完整的冒泡排序如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var arr=[23,1,32,22,8,101,9,-100];
function bubbleSort(arr){
var tmp, len=arr.length;
for(var i=0; i<len-1; i++){
for(var j=0; j<len-1; j++){
if(arr[j]>arr[j+1]){
tmp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=tmp;
}
}
}
return arr;
}
console.log(bubbleSort(arr));

之所以要len-1,是因为,每次抓两个数比较,所以,最后那个数就不需要了…

选择排序

实现原理:循环数组,每次从数组里面找到最小值,然后和当前的换位置,又是换位置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var arr=[23,1,32,22,8,-1000,101,9,-100];
function selectionSort(arr){
for(var i=0; i<arr.length; i++){
var iMinIndex=i;
for(var j=i+1; j<arr.length; j++){
if(arr[j]<arr[iMinIndex]){
iMinIndex=j;
}
}
var tmp;
tmp=arr[i];
arr[i]=arr[iMinIndex];
arr[iMinIndex]=tmp;
}
return arr;
}
console.log(selectionSort(arr));

iMinIndex就是每次最小值的索引!over………

当然还有很多,后续一一实现,比如插入排序,希尔排序,归并排序,快速排序等…..

Powered by Hexo and Hexo-theme-hiker

Copyright © 2013 - 2019 FE blog All Rights Reserved.

访客数 : | 访问量 :