java字符串数组第一个_java程序求助

输入十整数,按升序输出,并且奇数

你这段代码有太多漏洞了。你的思路大概应该是这样的:1、对输入的数组进行遍历,把奇数部分放在数组的前半部分,偶数的放在后半部分。2、分别对前后两部分进行排序,得到想要的结果。

然而,你的程序也相应的有两个个问题。

对于第一步,你的程序是:先统计奇偶数的个数,分别记录在h和m上。接着有

for(i=0;i<10;i++)

if(a[i]%2)

a[n--]=a[i];//把奇数放在一起

else

a[m++]=a[i];//把偶数放在一起

你想想,假如奇数个数为6,第一个数和第六个数都是奇数,不妨假设a[0]=1,a[5]=3,那么遍历到第一个数就会有a[5]= a[0]=1。 a[5]...全部

你这段代码有太多漏洞了。你的思路大概应该是这样的:1、对输入的数组进行遍历,把奇数部分放在数组的前半部分,偶数的放在后半部分。2、分别对前后两部分进行排序,得到想要的结果。

然而,你的程序也相应的有两个个问题。

对于第一步,你的程序是:先统计奇偶数的个数,分别记录在h和m上。接着有

for(i=0;i<10;i++)

if(a[i]%2)

a[n--]=a[i];//把奇数放在一起

else

a[m++]=a[i];//把偶数放在一起

你想想,假如奇数个数为6,第一个数和第六个数都是奇数,不妨假设a[0]=1,a[5]=3,那么遍历到第一个数就会有a[5]= a[0]=1。

a[5]还没遍历到之前它的值就被你替换掉了,这样会流失了后面的数值。如果这时a[5]是偶数,那么这个偶数也同样被你破坏了。 从偶数的角度分析也是一样道理。

其次,n--和m++并不互补,也就是不对立有重叠。

据你的程序始终有n=m,那么n--和m++使m(或者n)本身的值丢失。

上述问题的解决方法有两个。第一种方法就是建立一个新的和a数值长度的数组,假设为b[10],那么上述程序写成

for(i=0;i<10;i++)

if(a[i]%2)

b[n--]=a[i];

//n先返回再自减,也就是n--是从n开始计数的,而非n-1

else

b[++m]=a[i];//m先自加,也就是m是从m+1开始计数的

另一种方法就是类似快速排序的方法。

这道题其实和快速排序的第一步——把数组划分为两个部分相类似。

具体:使用两个变量,从数组的低下标往上计数和从数组高下标往下计数。假设两量为i,j。 初始化:i=0,j=9; 如果a[i]为偶数且a[j]为奇数,则两者调换。

如果如果a[i]为奇数且a[j]为偶数,则不操作,i++,j--;如果a[i]为偶数且a[j]为偶数,则j--。如果a[i]为奇数且a[j]为奇数,则i++。直到i=j的时候完成。当然,最后可以根据i(或者j)的大小判断奇数或偶数的个数了。

。收起

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值