1、快速排序:
选择数组中的一个元素作为“枢轴”。我们可以选择任何元素作为枢轴,但中间的元素更直观。
所有小于枢轴的元素都被移动到枢轴的左侧;所有大于或等于枢轴的元素都被移动到枢轴的右侧。
对于枢轴左右的两个子集,重复第一步和第二步,直到所有子集中只剩下一个元素。
function quickSort(arr){
if(arr.length<=1) {return arr}
let idx = Math.floor(arr.length/2)
let middle = arr[idx];
let left = [];
let right = [];
for(let i=0;i<arr.length;i++){
if(arr[i]<middle){
left.push(arr[i])
}else if(arr[i]>middle){
right.push(arr[i])
}
}
return quickSort(left).concat([middle],quickSort(right))
}
let arr = [86, 24, 64, 15, 48, 30, 90, 49];
let res = quickSort(arr);
console.log(res);//[15, 24, 30, 48, 49, 64, 86, 90]
2、冒泡排序
就是将数组中每相邻的两个项数进行比较按照一定的顺序(从大到小/从小到大)进行排序,
一轮排好一个数,经过有限轮次的比较后即可按需求排好数组的项数。
var arr = [9,8,7]
for(let i=0;i<arr.length-1;i++){
for(let j=0;j<arr.length-1;j++){
if(arr[j]>arr[j+1]){
var tmp = arr[j];
arr[j] = arr[j+1]
arr[j+1] = tmp;
}
}
}
3、插入排序
1.从第一个元素开始,该元素可以认为已经被排序;
2.取出下一个元素,在已经排序的元素序列中从后向前扫描;
3.如果该元素(已排序)大于新元素,将该元素移到下一位置;
4.重复步骤3,直到找到已排序的元素小于或者等于新元素的位置;
5.将新元素插入到该位置后;
6.重复步骤2~5
var arr = [98, 7, 65, 54, 12, 6];
let preIndex,current;
for(let i=1;i<arr.length;i++){
preIndex=i-1;
current=arr[i];
while(preIndex>=0 && current<arr[preIndex]){
arr[preIndex+1] = arr[preIndex];
preIndex--;
}
arr[preIndex+1] = current
}
4、选择排序
首先在未排序数组中找到最小(大)元素,存放在数组的起始位置。
再从剩余数组元素中继续寻找最小(大)元素,返回放在已排序数组的末尾
重复第二步,直到所有元素都排序完成
var arr = [123,203,23,13,34,65,65,45,89,13,1];
for(let i=0;i<arr.length;i++){
for(let j=i+1;j<arr.length;j++){
if(arr[i]>arr[j]){
var temp = arr[i];
arr[i] = arr[j];
arr[j] = temp
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/137389.html