算法题

题目
假设有一个数组 A ,int[] A = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ... N}; 原来是需要查出大于0的数组,但是由于传参错误或者其他原因,导致查出0和负数了,现在要求在不使用新数组和新集合的情况下(即只使用这个A数组,因数组数据比较大,且只能用一次循环) 实现正数放到数组的前面,小于等于0的数放到数组的末尾

实现

public class Main {
    
    public static void main(String[] args) {
        int[] nums = { 1 , 3 , -1 ,0 , 2 , 1 , -4 , 2 , 0 ,1 ,0};
        System.out.println(Arrays.toString(sort(nums)));
    }

    private static int[] sort(int[] nums) {
        int r=nums.length-1;
        for (int i = 0, len = nums.length; i < len; i++) {
            if(r==i) {
                break;
            }
            if(nums[i]<=0) {
                int temp=nums[r];
                nums[r]=nums[i];
                nums[i]=temp;
                r--;
                i--;
            }
        }
        
        return nums;
        
    }
}

你可能感兴趣的:(算法题)