一.冒泡排序
说起冒泡排序,可能每个人都不会陌生,实现思路相当简单明了,就是不停的对数组进行两两比较,将较大(较小)的一项放在前面;
如 var arr = [7, 3, 10, 1, 8, 4, 2, 4, 4, 3] 进行升序排列,排序过程如下
第一次 [3, 7, 1, 8, 4, 2, 4, 4, 3, 10]
第二次 [3, 1, 7, 4, 2, 4, 4, 3, 8, 10]
以此类推 。。。。
结果 [1, 2, 3, 3, 4, 4, 4, 7, 8, 10];
//冒泡排序 function bubbleSort(arr){ var len = arr.length,t for(j=0;j<=len-1;j++){ for(i=0;i<=len-j-1;i++){ if(arr[i]>arr[i+1]){ t = arr[i+1]; arr[i+1] = arr[i]; arr[i] = t; } } } return arr; }
二.快速排序
快速排序也是我们常用到的一种排序方式,核心步骤如下
1.选择中间数。
2.构建两个临时数组,比中间数小的放到左边,大的放到右边
3.对临时数组重复1-2;
例如,我们原始数组为[2,4,1,5,6,3,12,9,7],第一步我们选择第5项 6 为中间数,创建临时数组left,right,则left 结果为[2,4,1,5,3],right 结果为 [12,9,7]。然后再分别对left和right进行相同的操作,直至left及right数组长度为1.
具体代码如下:
//快速排序 function quickSort(arr){ if(arr.length <= 1){ //数组长度为1时,则停止递归 return arr } var l = Math.floor(arr.length/2); //选择中间数 var left = [],right=[]; var splitEle = arr.splice(l,1)[0] //将中间数从原数组删除并保存 for(i=0;i<arr.length;i++){ if(arr[i] < splitEle){ left.push(arr[i]) }else{ right.push(arr[i]) } } return arguments.callee(left).concat(splitEle,arguments.callee(right)) }
三.选择排序
选择排序核心思想如下:
加入我们进行升序排列,我们假设数组第一项为最小值,然后将第一项与其他项分别比较,如果其他项小于第一项,则交换位置,这样第一次循环结束我们可以保证第一项为最小值。然后第二项做类似操作,然后以此类推,具体如下图所示
代码如下:
//选择排序 function selectQuot(arr){ for(i=0; i<arr.length-1; i++){ for(j=i+1;j<arr.length;j++){ if(arr[i] > arr[j]){ var temp; temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } } return arr }