给定一个数组,int a[]={24,3,21,-1,5,0,-23,99,0,-28},要求在不新建新的数组的情况下,只用一次循环,将数组中大于0的数放在数组左边,小于等于0的数放在数组右边

这里写自定义目录标题


今天安利一个Java算法题,大致题意是这样的:给定一个数组,int a[]={24,3,21,-1,5,0,-23,99,0,-28},要求在不新建新的数组的情况下,只用一次循环,将数组中大于0的数放在数组左边,小于等于0的数放在数组右边。
我的解答思想是这样的:设置两个索引放在数组开始位置和结束位置的下一位,循环开始后,头索引向后遍历,只要是>0的,就继续下一个;尾索引向前遍历,只要<=0就继续向前;当头索引遇到第一个不符合条件的,就和尾索引遇到的第一个不符合条件的值做交换。最终,将所有的正数放在了数组左边,小于等于0的数放在了右边,且只用了一次循环。
代码如下:
给定一个数组,int a[]={24,3,21,-1,5,0,-23,99,0,-28},要求在不新建新的数组的情况下,只用一次循环,将数组中大于0的数放在数组左边,小于等于0的数放在数组右边
运行结果如下:
给定一个数组,int a[]={24,3,21,-1,5,0,-23,99,0,-28},要求在不新建新的数组的情况下,只用一次循环,将数组中大于0的数放在数组左边,小于等于0的数放在数组右边