排序
一. 冒泡排序
元素和相邻最近的元素比较
1. 外层循环-1;
2. 内层循环-1-i;
3. 内循环相邻比大小;
4. 邻里交换位置
var arr = [3, 5, 8, 4, 7, 6];
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 tmp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = tmp;
}
}
}
console.log(arr);
二 . 选择排序
和每一个元素和其他元素比较
var arr = [3, 5, 8, 4, 7, 6];
for (var i = 0; i < arr.length; i++) { //台上i
for (var j = i+1; j < arr.length; j++) { //台下j
if (arr[i] > arr[j]) {
var tmp = arr[j];
arr[j] = arr[i];
arr[i] = tmp;
}
}
}
console.log(arr);
三 . 快速排序
-
找到中间的下标
-
通过中间的下标,找到中间数
-
定义左边的数组
-
左边 + 中间数 + 右边数,这里使用的是 函数的递归
-
设置一个变量 接受函数
var arr = [2, 4, 6, 3, 5];
function fnt(arr) {
if (arr.length <= 1) {
return arr; //如果数组小于等于1, 就不动数组
}
//1. 找到中间的下标
var mIndex = Math.floor(arr.length / 2);
//2. 通过中间的下标,找到中间数
var mVal = arr.splice(mIndex, 1)[0];
var leftArr = []; // 定义左边的空数组
var rightArr = []; // 定义右边的空数组
for (var i = 0; i < arr.length; i++) {
if (arr[i] > mVal) {
rightArr.push(arr[i]);
} else {
leftArr.push(arr[i]);
}
}
// 左边 + 中间数 + 右边数,这里使用的是 函数的递归
return fnt(leftArr).concat(mVal, fnt(rightArr));
}
var res = fnt(arr); //设置一个变量 接受函数
console.log(res);
四 . 去重
imdexOf, 如果找到啦就返回下标,找不到就返回-1;
function fn1(list) {
var tempArr = []; //一个空数组
for (var i =0; i <list.length; i++) {
if (tempArr.indexOf(list[i]) == -1) {
tempArr.push(list[i]);
}
}
return tempArr;
}