一:数组的去重方法
1 对象里面,相同的属性,后面的会覆盖前面的
var arr = [1,2,2,3,4,4,6,6,7,7,9];
var b = {};//
var c = [];
for(i = 0; i<; i++){
b[arr[i]] = arr[i]; //等同于[i] = a[i] 属性是一个变量,所以不能用点语法,要用中括号
}
for(v in b){
(b[v]);//for in 遍历对象,取出value值,然后推到新的空数组里
}
©
2 indexOf
var arr = [1,1,1,2,2,2,3,3,4,4,5,5,6,6,7]
var newarr = [];
for(i = 0; i<; i++){
if((arr[i]) == -1){
(arr[i])
}
}
(newarr)
3 set
var arr = [1,1,1,2,2,2,3,3,4,4,5,5,6,6,7]
var arr2 = new Set(arr);
var arr3 = new Array(…arr2)
var arr4 = (…arr2)
4 遍历数组,如果数组的第i项在数组中第一次出现的位置不是i
var arr = [1,2,2,2,3,3,5,5,5,6,6,6,6];
function fn(arr){
var e = [];
for(i = 0; i<; i++){
if((arr[i]) == i){//遍历数组,如果数组的第i项在数组中第一次出现的位置不是i
//则表示第i项是重复的,否则不重复,存入数组e
(arr[i])
}
}
return e;
}
(fn(arr))
//6
var arr = [1,2,2,2,3,3,5,5,5,6,11,12,12,22,22,6,6,6];
function fn1(arr){
()
var e = [1,2,3];
for(i = 0; i<; i++){
if(arr[i] != e[ - 1]){
(arr[i])
}
}
return e;
}
(fn1(arr))
//7
var arr = [1,2,2,3,1,3,5,5,5,6,11,12,12,22,22,6,6,6];
function fn2(arr){
var r = [];
for(i = 0; i<; i++){
for(j = i+1; j<; j++){
if(arr[i] == arr[j]){
j = ++i;
//(j)
}
}
(arr[i]);
}
return r
}
(fn2(arr))
二:数组的排序方法
1.冒泡排序
for (let i = 0; i < - 1; i++) { //此处表示比较躺数
for (let j = 0; j < - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
let temp = arr[j + 1];
arr[j + 1] = arr[j];
arr[j] = temp;
}
}
}
时间复杂度
最好的情况:数组本身是顺序的,外层循环遍历一次就完成O(n)
最坏的情况:,O(n2)数组本身是逆序的,内外层遍历O(n2)
空间复杂度
开辟一个空间交换顺序O(1)
稳定性
稳定,因为if判断不成立,就不会交换顺序,不会交换相同元素
冒泡排序它在所有排序算法中最简单。然而, 从运行时间的角度来看,冒泡排序是最差的一个,它的复杂度是O(n2)。
冒泡排序比较任何两个相邻的项,如果第一个比第二个大,则交换它们。元素项向上移动至正确的顺序,就好像气泡升至表面一样,冒泡排序因此得名。
交换时,我们用一个中间值来存储某一交换项的值。其他排序法也会用到这个方法,因此我 们声明一个方法放置这段交换代码以便重用。
2.选择排序
for (let i = 0; i < - 1; i++) {
for (let j = i + 1; j < ; j++) {
if (arr[i] > arr[j]) {
let temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
}
}
3.快速排序
var quickSort = function(arr) {
if( < 1) {//如果数组就是一项,那么可以直接返回
return arr;
}
var centerIndex = ( / 2);//获取数组中间的索引
var centerValue = arr[centerIndex];//获取数组中间项
var left = [], right = [];
for(var i = 0; i < ; i++){
if(arr[i] < centerValue){
(arr[i]);
}else{
(arr[i]);
}
}
return quickSort(left).contanct([centerValue], quickSort(right));//递归调用
}