纯number类型数组,将数组中的0全部移动到数组的末尾,其余数据相对位置不改变

147 阅读1分钟

方法一
找到第一个为零的数据,在剩余的数据中找到第一个不为零的数据,然后进行交换位置

  let changeArr = function(arr){
    for(let i=0;i<arr.length;i++){
      if(arr[i]==0){
        for(let f = i+1;f<arr.length;f++){
          if(arr[f]!=0){
            arr[i] =  arr[f]
            arr[f] = 0
            break
          }
        }
    }
    }
    return arr
  }

方式二
异步指针的方式,比较难以理解

 let movezero = function(arr){
        let tmp = 0
        for(let i = 0;i<arr.length;i++){
            if(arr[i]!=0){
                if(arr[tmp]===0){
                    arr[tmp] = arr[i]
                    arr[i]= 0
                }
                tmp ++
            }
        }
        return arr
    }

方式三
利用冒泡排序

let  bubble = function(arr){
	for(let i =0;i<arr.length;i++){ // 比较的轮次
		for(let j=0;j<arr.length-i;j++){ // 需要比较的次数
			if(arr[j]===0){
			// 进行交换
			let temp = arr[j+1]   // 每次将0向后进行交换即可
			arr[j+1] = arr[j]
			arr[j] = temp
				}
			
			}
		}
	}

同理利用js api sort方法(内部也是冒泡排序的实现)

var moveZeroes = function(nums) {
  return nums.sort((a,b)=>(b?0:-1))
}

其他还有很多以上是不进行创建新数组的方式