先了解一下快速排序
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]
说明:
必须在原数组上操作,不能拷贝额外的数组。
尽量减少操作次数。
使用双指针,左指针指向当前已经处理好的序列的尾部,右指针指向待处理序列的头部。
初始位置都为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++; } }