冒泡排序
选择排序
插入排序
更新一个(快速排序)
对于好久都不清楚的排序今天理了一下,包括冒泡排序、选择排序、插入排序,写完这个再看看和快速排序的区别。感觉大学学的都还给老师了。
----冒泡
/* 现在有 数组 arr=[4,9,7,1,3] 相邻值之间进行对比,前者比后者大,则进行互换,每一次都会把最大的放到最后面 4 | 9 | 7 | 1 | 3 第一轮 4 | 7 | 1| 3 | 9 第二轮 4 | 1 | 3 | 7 | 9 第三轮 1 | 3 | 4 | 7 | 9 第四轮 1 | 3 | 4 | 7 | 9 *
冒泡排序的具体代码
var arr=[4,9,7,1,3]; maopao(arr); function maopao(arr){ for(var i=0;i<arr.length-1;i++){ //循环次数是length-1 for(var j=0;j<arr.length-i-1;j++){//内部循环 if(arr[j]>arr[j+1]){ var temp=arr[j]; arr[j]=arr[j+1]; arr[j+1]=temp; } } } console.log('冒泡排序'+arr); }
----选择排序
/* 现在有 数组 arr=[4,9,7,1,3] 假设 i下表对应的值是最小值,然后,分别和数组中的每一个值进行对比 4 | 9 | 7 | 1 | 3 第一轮 1 | 7 | 4| 3 | 9 第二轮 1 | 3 | 7 | 4 | 9 第三轮 1 | 3 | 4 | 7 | 9 第四轮 1 | 3 | 4 | 7 | 9 */
var arr=[4,9,7,1,3]; xuanzepaixun(arr); function xuanzepaixun(arr){ for(var i=0;i<arr.length-1;i++){ for(var j=i+1;j<arr.length;j++){ var min=i; //假设下标为i的值是最小值 if(arr[min]>arr[j]){ //分别和数组中的值依次进行对比 var temp=arr[j]; arr[j]=arr[min]; arr[min]=temp; } } } console.log('选择排序'+arr) }
---插入排序
/* 现在有 数组 arr=[4,9,7,1,3] 把下标为i的值分别与下标i前面的值进行对比进行从小到大排序 4 | 9 | 7 | 1 | 3 第一轮 4 | 9 | 7 | 1 | 3 第二轮 4 | 7 | 9 | 1 | 3 第三轮 1 | 4 | 7 | 9 | 3 第四轮 1 | 3 | 4 | 7 | 9 */ var arr=[4,9,7,1,3]; charupaixu(arr); function charupaixu(arr){ for(var i=1;i<arr.length;i++){ var num=arr[i]; var j=i; while(arr[j-1]>num){ arr[j]=arr[j-1]; --j; } arr[j]=num; } console.log(arr); }
---快速排序
//1.在数据之中,找个基准点 //2.建立两个数组,分别存储左边和右边的数组 //3.利用递归进行下次比较 function quirkSort(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++){ if(numValue>arr[i]){ left.push(arr[i]);//小于numValue的数传到左边 }else{ right.push(arr[i])//大于numValue的数传到左边 } } return quirkSort(left).concat(numValue,quirkSort(right)); //进行递归重复比较 } var arr=[7,3,4,8,9,5]; alert(quirkSort(arr));//3,4,5,7,8,9
快速排序参考地址:https://github.com/hawx1993/Front-end-Interview-questions
---小结
冒泡、选择、插入排序,最大的不同就是数据不同数据之间对比方式不同,结果都一样。最后感觉快速排序更简单点。