冒泡排序
核心思想:每次比较相邻的两个值,若后面的值比前面的值小,则交换位置,重复此操作,直到数据从小到大排列看起来像水泡一样冒上去了!
如何交换数据位置?
使用临时变量
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=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;
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………
当然还有很多,后续一一实现,比如插入排序,希尔排序,归并排序,快速排序等…..