一、冒泡排序
原理:
- 在一次循环中相邻的两个元素进行循环比较,如果前者大(小)于后者,则交换位置,这样做的结果就是第一次循环最大(小)的排到了最后;
- 重复这样的动作,重复多少次,由数组的长度决定,比如length为2,重复一次就行,length为3,就重复两次..依次类推,要重复length-1次;
// 冒泡排序(从小到大)
function sortArr (arr) {
// 控制循环多少次
for (let i = 0; i < arr.length-1; i++) {
// 控制比较
for (let j = 0; j < arr.length; j++) {
// 一次循环中,如果前者大于后者就交换位置,所以第一次循环最大的就在最后
if (arr[j] > arr[j+1]) {
// 交换位置
const element = arr[j];
arr[j] = arr[j+1];
arr[j+1] = element
}
}
}
}
var arr = [9,3,10,6,2,8];
sortArr(arr);
console.log(arr)// ;[2,3,6,8,9,10]
二、使用sort方法
原理:
封装一个排序函数,然后将该函数当作参数传递给数组的sort方法;
function sortArray(m,n) {
if (m > n) {
return 1
} else if (m < n) {
return -1
} else {
return 0
}
}
var arr = [9,3,10,6,2,8];
arr.sort(sortArray);// [2,3,6,8,9,10]
三、插入排序
原理:
对于一个数组,先从中取出第一个项形成新的数组,其后每次往新的数组中插入新的值,每次插完后都要进行排序,直到插完为止;
// 插入排序
function insertSort(arr) {
let arr_new = [arr[0]];
for (let i = 1; i < arr.length; i++) {
// 插入多少次
arr_new.push(arr[i]);
// 排序只需要循环length-1次
for (let j = 0;j < arr_new.length - 1;j++){
// 每次插入要做的事情
if (arr_new[arr_new.length-j-1] < arr_new[arr_new.length-j-2]){
// 交换位置
var arrTem = arr_new[arr_new.length-j-2];
arr_new[arr_new.length-j-2] = arr_new[arr_new.length-j-1];
arr_new[arr_new.length-j-1] = arrTem;
}
}
}
return arr_new
}
var arr = [9,3,10,6,8,10]
console.log(insertSort(arr))