283.移动零(力扣)-Java-快速排序-双指针

283.移动零(力扣)-Java-快速排序-双指针

先了解一下快速排序
1.从数组中选择一个元素值作为基准元素(通常选择第一个元素值-temp=nums[0])
2.设定起始位置-left -nums[0],末尾位置-right[n]
3.先从末尾 right 开始比较,大于基准数据则 right - -;小于基准数据则将 right 位置的值赋给 left 位置,再将 left ++
4.若 执行 left = right ,再从开始 left 开始比较,大于基准数据则将 left 位置值赋给 right 位置,再将 right - - ;小于基准数据则 left ++
5.若 执行 right = left,再从末尾 right 开始比较,大于基准数据则 right - -;小于基准数据则将 right 位置的值赋给 left 位置,再将 left ++
( 以此循环至 right = left ,此时 left 或 right 的位置就是基准数的位置 )

关于快速排序更多详细信息点击这里

题目描述

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。
示例:
输入: [0,1,0,3,12]
输出: [1,3,12,0,0]

说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。

1.双指针法

使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
初始位置都为0,指向数组第一个元素。
右指针不断向右移动,每次右指针指向非零数,则将左右指针对应的数交换,同时左指针右移。

public static void moveZeroes(int[] nums) {
		int n=nums.length;
		int left=0,right=0;
		while(right<n) {
			if(nums[right]!=0) {
				int temp=nums[left];
				nums[left]=nums[right];
				nums[right]=temp;
				left++;
			}
			right++;
		}
		
	}
上一篇:水质生物毒性检测-应急常规项目39项


下一篇:【DA】常见的假设检验