1、sort排序
js内置方法,使用如果数组成员不是数字类型,也可以返回一个回调,用于自定义条件判断排序。
let list = [2,34,1,567,34,33,21,2,0,342,1,111,78];
let resList = list.sort(function(a,b) {
return a-b;
});
console.log(resList); //[0, 1, 1, 2, 2, 21, 33, 34, 34, 78, 111, 342, 567]
2、冒泡排序
嵌套循环,比较相邻两个元素的大小,如果符合条件则交换
let list = [2,34,1,567,34,33,21,2,0,342,1,111,78]
for (let i = 0; i < list.length; i++) {
for (let j = 0; j < list.length; j++) {
if (list[i] > list[j]) {
let a = list[i];
list[i] = list[j];
list[j] = a;
}
}
}
console.log(list)
3、选择排序
选出最小的放第一个位置,次小的放第二个位置,次次小的放第三个位置,以此类推
function selectSort(list) {
let li = [],resolveList = [].concat(list);
for (let i = 0; i < list.length; i++) {
//获取最小数,b用来记录index,最后splice掉
let a = resolveList[0],b;
for (let j = 0; j < resolveList.length; j++) {
if (a >= resolveList[j]) {
a = resolveList[j];
b = j
}
}
resolveList.splice(b, 1)
li[i] = a;
}
return li;
}
selectSort([2,34,1,567,34,33,21,2,0,342,1,111,78])
4、快速排序
获取数组的中间位置,然后比中间位置小的放左边,大的放右边。然后将左右两侧的数组递归选择排序,最后合并到一起。
function quickSort(list) {
//console.log(list)
if (list.length === 1 || (list.length === 2 && list[0] === list[1])) {
return list;
}
let middleIndex = Math.floor(list.length / 2),middleVal = list[middleIndex], listLeft = [],listRight = [];
for (let j = 0; j < list.length; j++) {
if (j !== middleIndex) {
if (middleVal >= list[j]) {
listLeft.push(list[j])
} else {
listRight.push(list[j])
}
}
}
listLeft.push(middleVal)
return quickSort(listLeft).concat(quickSort(listRight))
}
quickSort([2,34,1,567,34,33,21,2,0,342,1,111,78])
5、插入排序
从第二个位置开始比较,依次和前面的成员进行比较,如果小(或者大)则交换位置。如果不小(或者大)则可以跳出循环,因为是从第二个开始比较的,前面的都是有序的。例如[5,6,8,20,15],15和20比小,需要往前移,15和8比不需要往前移,则15和剩下的5、6也就不需要再比较了,因为前面已经比较过了,已经是有序的了。
let arr = [2,34,1,567,34,33,21,2,0,342,1,111,78];
for (let i = 1; i < arr.length; i++) {
let j = i;
while (j > 0){
if (arr[j] < arr[j-1]){
let temp ;
temp = arr[j];
arr[j] = arr[j-1];
arr[j-1] = temp;
j--;
} else {
break;
}
}
}
console.log(arr)