Loading

js数组去重与排序

数组是一维纯数字去重

arr1=[15,5,1,2,6,5,6,8,10,1] arr2=[]
思路: 对数组进行for循环遍历,判断新数组arr2里是否存在每一项,(indexOf()=-1或includes()=false)不存在把这一项加到新数组里。

for(i=0;i<arr1.length;i++){
    if(arr2.indexOf(arr1[i])=== -1 ){
        arr2.push(arr1[i])
    }
}

数组排序

const arr = [1,27,16,34,8,100,78,82,19,48,95,63];
1.sort(面试不允许)
sort将数组变为字符串排序,默认会按ASCII字符排
arr.sort = [1, 100, 16, 19, 27, 34, 48, 63, 78, 8, 82, 95]
也可以比较函数作为sort参数,排序规则
arr.sort( (item1,item2) => item1- item2 ) = [1, 8, 16, 19, 27, 34, 48, 63, 78, 82, 95, 100]
2.选择排序
思路:第一次循环找下标最大或最小的下标值,把这项放到最后面。原来最后面的那个值放到他的位置(替换)
3.冒泡排序
思路:对相邻的俩个值进行对比,俩个for循环嵌套,里面的for循环找一个最大值,外面的for循环通过数组的长度决定执行几次里边的循环。
俩个数怎么互换位置,通过一个第三值。

 for(let i = 0;i < arr.length;i++){
    for(let j = 0;j <arr.length-i;j++){
        if(arr[j]>arr[j+1]){
           let t = arr[j];
          arr[j] = arr[j+1];
           arr[j+1] = t;
       }
    }

4.快速排序
思路:从数组选一个基准,(第一项)

function sort(arr){
  //当左or右数组为1个值时结束
  if(arr.length <= 1){
    return arr
}
  let 基准 = arr[0];
  const left= []
  const right= []
  for(let i = 1; i < arr.length; i++){
    if(arr[i]>基准 ){
       //放右边
        right.push(arr[i])
      }else{
      //放左边
      left.push(arr[i])
      }
  }
  //递归 sort(left)  sort(right)
  return [...sort(left),基准,...[sort(right)]
}
console.log( sort(arr));
posted @ 2022-05-19 10:07  梧桐树211  阅读(236)  评论(0编辑  收藏  举报