冒泡排序:
1 var arr=[1,10,2,100,101,98]; 2 3 function bubbleSort(arr){ 4 var len=arr.length,flag=null; 5 if(len>1){ 6 for(var i=0;i<len-1;i++){ 7 flag=false;//位置变更标识符,可以优化性能 8 for(var j=0;j<len-1-i;j++){ 9 if(arr[j]>arr[j+1]){//前一项如果大于后一项 10 //先存下前一项的值 11 var temp=arr[j]; 12 //后一项的值赋给前一项 13 arr[j]=arr[j+1]; 14 //前一项的值赋给后一项 15 arr[j+1]=temp; 16 flag=true;//有位置交换则改变flag的值 17 } 18 } 19 if(!flag){//检测到上一轮已经没有位置变更,就说明排序已经完成 20 break; 21 } 22 } 23 } 24 return arr; 25 } 26 27 console.log(bubbleSort(arr));//[1, 2, 10, 98, 100, 101]
插入排序:
1 var arr=[1,10,2,100,101,98,2]; 2 3 function insertSort(arr){ 4 var len=arr.length; 5 if(len>1){ 6 for(var i=1;i<len;i++){ 7 if(arr[i]<arr[i-1]){//当前项小于前一项的时候才向前插入 8 var cur=arr[i],j=i-1;//保存第i项的值,找到前一项的索引 9 while(j>=0 && cur<arr[j]){//前一项存在且第i的值小于前一项 10 arr[j+1]=arr[j];//当前比较项赋值为前一项的值 11 j--;//继续向前查找 12 } 13 arr[j+1]=cur;//将第i项插入到当前位置 14 } 15 } 16 } 17 return arr; 18 } 19 console.log(insertSort(arr));//[1, 2, 2, 10, 98, 100, 101]
快速排序:
1 var arr=[1,10,2,100,101,98,2]; 2 3 function quickSort(arr){ 4 if(arr.length<=1){ 5 return arr; 6 } 7 var midIndex=Math.floor(arr.length/2); 8 var minItem=arr.splice(midIndex,1)[0]; 9 var leftArr=[],rightArr=[]; 10 for(var i=0;i<arr.length;i++){ 11 var cur=arr[i]; 12 cur<minItem?leftArr.push(cur):rightArr.push(cur); 13 } 14 return quickSort(leftArr).concat(minItem,quickSort(rightArr)); 15 } 16 console.log(quickSort(arr));//[1, 2, 2, 10, 98, 100, 101]
1 function quickSort(arr){ 2 if(arr.length<=1){ 3 return arr;//如果数组只有一个数,就直接返回; 4 } 5 6 var num = Math.floor(arr.length/2);//找到中间数的索引值,如果是浮点数,则向下取整 7 8 var numValue = arr.splice(num,1);//找到中间数的值 9 var left = []; 10 var right = []; 11 12 for(var i=0;i<arr.length;i++){ 13 if(arr[i]<numValue){ 14 left.push(arr[i]);//基准点的左边的数传到左边数组 15 } else{ 16 right.push(arr[i]);//基准点的右边的数传到右边数组 17 } 18 } 19 20 return quickSort(left).concat(numValue,quickSort(right));//递归不断重复比较 21 }
阶乘:
1 function factorial(n) { 2 if (n === 1) return 1; 3 return n * factorial(n - 1); 4 }
1 function factorial(n, total) { 2 if (n === 1) return total; 3 return factorial(n - 1, n * total); 4 } 5 6 factorial(5, 1)