java 4数字 组列排序_java – 按余数4对数组进行排序

我有一个练习,我必须按以下方式对数组进行排序:

>除以4而没有余数的数字将是数组中的第一个(例如4,8,12,16).

>将剩余的1除以4的数字将是数组中的第二个(1,5,9).

>将剩余的2除以4的数字将是数组中的第三个(2,6,10).

>将剩余的3除以4的数字将在数组中排在最后.

例如,以下数组:

int []a={1,7,3,2,4,1,8,14}

将会:

4 8 1 1 2 14 3 7

组内的顺序无关紧要.

我找到了一个解决O(n)时间复杂度和O(1)空间复杂度的解决方案.

然而,它是丑陋的,并在阵列上移动3次.我想要一个更优雅的解决方案.

这是我的代码:

int ptr=a.length-1; int temp=0, i=0;

while (i

//move 3 remained to the end

if (a[i] % 4==3){

temp=a[ptr];

a[ptr]=a[i];

a[i]=temp;

ptr--;

}

else

i++;

}

i=0;

while (i

if (a[i]%4==2)

{

temp=a[ptr];

a[ptr]=a[i];

a[i]=temp;

ptr--;

}

else

i++;

}

i=0;

while (i

if (a[i]%4==1)

{

temp=a[ptr];

a[ptr]=a[i];

a[i]=temp;

ptr--;

}

else

i++;

}

重要的是要知道:

>我不希望时间复杂度比O(n)差,空间复杂度比O(1)差.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值