标签:二次 key quic [] sort 中间 数组 插入排序 cat
1、冒泡排序
思想:比较相邻的前后两个数据,如果前面的大于后面的,就交换两个数据位置,知道遍历完数组,排序完成。
实现:
function bubbleSort(arr) { for(var i = 0;i < arr.length-1;i++) { for(var j;j < arr.length-1;j++) { if(arr[j] > arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; } console.log(bubbleSort([5,9,8,6,2,3,7])
2、选择排序
思想:第一次遍历数组找出最小的值与第一个元素交换,第二次遍历N-1个数据,找出最小的值与第二个元素交换,直到排序完成。
实现:
function selectSort(arr){ var min,temp; for(var i=0;i<arr.length-1;i++) { min = i; for(var j = i+1;j < arr.length;j++) { if(arr[j] < arr[min]) min = j; } temp = arr[i]; arr[i] = arr[min]; arr[min] = temp; } return arr; } console.log(selectSort([6,5,2,4,3,7]))
3、快速排序
思想:先从数组找设置一个基准数(任意,一般取中间);将比基准数打的全放在它的右边,小的放在左边;在对左右两个区间重复第1、2步,直到区间各剩一个数。
实现:
function quickSort(arr) { if(arr.length <= 1){ return arr; } var pivoIndex = Math.floor(arr.length / 2);//取中间数为基数 var pivot = arrr.splice(pivoIndex,1)[0]; //取基准点值,splice(index,1)函数可以返回数组中被删除的那个数 var left = [];//存放比基准点小的数组 var right = []; //存放比基准点大的数组 for(var i = 0;i < arr.length;i++) { if(arr[i] < pivot) { left.push(arr[i]); }else{ right.push(arr[i]) } } //递归执行以上操作,对左右两个数组进行操作,直到数组长度<=1 return quickSort(left).concat([pivot],quick(right)) }
4、插入排序
思想:
从第一个元素开始,该元素可以认为已经被排序;
取出下一个元素,在已经排序的元素序列中从后向前扫描;
如果该元素(已排序)大于新元素,将该元素移到下一位置;
重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
将新元素插入到该位置后;
重复步骤2~5。
function insertSort(arr){ var len = arr.length; for (var i = 1; i < len; i++) { var key = arr[i]; var j = i - 1; while (j >= 0 && arr[j] > key) { arr[j + 1] = arr[j]; j--; } arr[j + 1] = key; } return arr; }
标签:二次 key quic [] sort 中间 数组 插入排序 cat
原文地址:https://www.cnblogs.com/blancher/p/10571359.html