1. 直接排序
---最简单的排序
注 : sort函数,可以自定义数组的排序规则
//方式一 var arr=[5,3,1,2,4,6]; arr.sort (function (a,b){ return a - b; }); console.log(arr); //1,2,3,4,5,6 //方式二 function play(a,b){ if(a > b){ return 1; }else{ return -1; } } var arr2 = [5,3,1,2,4,6]; console.log(arr2.sort(play)); //1,2,3,4,5,6
原理 : 判断第一个数是否大于第二个数,如果是就不动它,否则就交换它们的位置,只是在调用这个排序函数一定要注意怎么调用它
2. 按字符串排序
var arr = ['**','****','*','***']; arr.sort(function(a,b){ return a.length - b.length; }); console.log(arr); // ["*", "**", "***", "****"]
3. 冒泡排序
原理 : 重复地走访要排序的数列,一次比较两个,如果他们的顺序错误就交换位置,走访会一直执行下去,直到没有数列项需要交换
var arr=[3,44,38,5,47,15,36,26,27,2,46,4,19,50,48]; for(var i = 0; i < arr.length; i++){ //遍历数据的长度 for(var j = 0; j<arr.length;j++){ //进行第二轮的循环 if(arr[j] >arr[j+1]){ //判断如果第一位数大于第二位数的话 var temp = arr[j]; //交换位置 arr[j] = arr [j+1]; arr[j+1] = temp; } } } console.log(arr);
冒泡排序动图效果 :
4.选择排序
原理 : 首先在未排序的数列中找到最小(大)值,排在排序序列的起始位置,然后在剩余未排序的数列中继续找最小(大)值,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
function play(arr){ //先循环遍历第一遍 len = arr.length; var min, //声明存储最小值的变量 temp; for(var i = 0; i<len;i++){ //进行第一轮的循环 min = i; //最小值等于循环到的 i for(var j = i; j<len;j++){ //进行第二遍的循环 if(arr[j] < arr[min]){ //当arr中 j 小于 最小值时 --找到最小的数 min = j; //就把 j当做是最小的数 } } temp = arr[i]; //将temp赋值为arr中的 i arr[i] = arr[min]; //将他们交换位置 arr[min] = temp; //将他们交换位置 } return arr; //将arr返回 } var arr=[3,44,38,1,56,90,0,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(play(arr));
选择排序动态效果图 :
5. 插入排序
原理 : 原理应该是最容易理解的了,因为只要打过扑克牌的人都应该能够秒懂。
function play (arr){ var len = arr.length; var temp; for(var i = 0; i < len; i++){ temp = arr[i]; //存储i的值 for(var j = i; j>0 && temp < arr[j-1] ;j--){ // 当前值和之前的每个值进行比较,发现有比当前值小的值就进行重新赋值 arr[j] = arr[j-1]; arr[j-1] = temp; } } return arr; } var arr=[3,44,38,1,56,90,0,5,47,15,36,26,27,2,46,4,19,50,48]; console.log(play(arr));
插入排序动态效果图 :