1.冒泡排序
一次比较两个相邻的数,如果不符合规则互换位置,一次比较就能够将最大或最小的值放在数组最后一位
继续对除【最后一位】之外的所有元素重复上述过程var arr = [123,203,23,13,34,65,65,45,89,13,1]; for(var i=0; i<arr.length-1; i++){ //每一轮比较要比多少次 for(var j=0; j<arr.length-1-i; j++){ //如果第一个比第二个大,就交换他们两个位置 if(arr[j]>arr[j+1]){ var temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } console.log(arr); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]
2.快速排序
基本思想:在已知数据集合中随便去一个基准(pivot),将其余数据以基准为中心,大于分放右边,小于的放左边,将左右两个子集重复以上两个步骤
var arr = [123,203,23,13,34,65,65,45,89,13,1]; //创建快速排序函数 function quickSort(tempArr){ //递归终止条件 if(tempArr.length<=1){ return tempArr; }; //取基准 var pivotIndex = Math.floor(tempArr.length/2); var pivot = tempArr.splice(pivotIndex,1); //分左右 var leftArr = []; var rightArr = []; for(var i=0;i<tempArr.length;i++){ if(tempArr[i]>pivot){ rightArr.push(tempArr[i]); }else{ leftArr.push(tempArr[i]); }; }; return quickSort(leftArr).concat(pivot,quickSort(rightArr)); }; console.log(quickSort(arr)); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]
3.插入排序
将要排序的数组分成两部分,每次从后面的部分取出索引最小的元素插入到前一部分的适当位置
思想:
- 从第一个元素开始,该元素可以认为已经被排序;
- 取出下一个元素,在已经排序的元素序列中从后向前扫描;
- 如果该元素(已排序)大于新元素,将该元素移到下一位置;
- 重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
- 将新元素插入到该位置后;
- 重复步骤2~5。
function InsertSort(arr) { let len = arr.length; let preIndex, current; for (let i = 1; i < len; i++) { preIndex = i - 1; current = arr[i]; while (preIndex >= 0 && current < arr[preIndex]) { arr[preIndex + 1] = arr[preIndex]; preIndex--; } arr[preIndex + 1] = current; } return arr; } var arr = [3,5,7,1,4,56,12,78,25,0,9,8,42,37]; InsertSort(arr);
4..js中的sort()方法
根据提供的排序规则,对数组元素进行排序。使用数字排序,必须通过一个函数作为参数来调用。
var arr = [123,203,23,13,34,65,65,45,89,13,1]; function func(a,b){ return a-b; } console.log(arr.sort(func)); //(11) [1, 13, 13, 23, 34, 45, 65, 65, 89, 123, 203]