A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© kevindavid 中级黑马   /  2012-6-10 00:28  /  1977 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 kevindavid 于 2012-6-10 10:37 编辑

class testdemo  
{  
   public static void main(String[] args)   
        {  
        int[ ] a={7,5,1,4,4,6,7,2,7};  

         
         for (int b=0;b<a.length ;b++ )  
        {  
              for (int c=0;c<a.length-b-1;c++ )  
                                {               
                                   if (a[c]<a[c++])
              {  


                 int d=a[c++];  
                a[c++]=a[c];  
                  a[c]=d;  
               }  
          }  
       }  
  
    for (int e=0;e<a.length ;e++ )  
   {  
        System.out.print(a[e]+"  ");  
    }  
}  

for (int b=0;b<a.length ;b++ )  
        {  
              for (int c=0;c<a.length-b-1;c++ )  

这两句中  c  到底是怎么做到最后取值是这个数组的最大角标长度。我知道 里面-1是为了防止角标越界但是很好奇的是为什么c最后可以得到角标的最大值

5 个回复

倒序浏览
你这个程序不能排序的……,a[c] 和 a[c++]是同一个元素,相当于 i = c++; i==c  是true;你这里把a[c++]改成a[c+1]就可以了
回复 使用道具 举报
class testdemo  
{  
   public static void main(String[] args)   
        {  
        int[ ] a={7,5,1,4,4,6,7,2,7};  

         
         for (int b=0;b<a.length ;b++ )  
        {  
              for (int c=0;c<a.length-b-1;c++ )  //3 因为最大的元素已经确定并且在最后角标位,所以其它元素不用再和它比较;6因为第二大的元素已经确定并且在倒数第二个角标上,所以其它元素不用再和它比较;依此类推,就完成了升幂排序;
                                {               
                                   if (a[c]<a[c++])//1当内循环最后一次循环的时候,a数组中的倒数个元素和最后元素比较;4 倒数第三个元素和元素比较;
              {  


                 int d=a[c++];  // 2 把最大的元素换位到最后一个角标上;5把第二大的元素换位到倒数第二个角标上
                a[c++]=a[c];  
                  a[c]=d;  
               }  
          }  
       }  
  
    for (int e=0;e<a.length ;e++ )  
   {  
        System.out.print(a[e]+"  ");  
    }  
}  

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

回复 使用道具 举报
楼主的这种算法应该是冒泡算法.冒泡算法的原理就是把数组中的元素两两进行比较,把较大的那一个放在后面,直到最大的数到达最后面的时候,再把数组的长度减一,又把新的数组再进行这样的排序,依此循环.
for (int b=0;b<a.length ;b++ )  
        {  
              for (int c=0;c<a.length-b-1;c++ ) // 这里的c其实就是为了循环遍历一个子数组.

     }
最重要的是楼主要理解了冒咆算法的原理后再来看代码就很清楚了.

评分

参与人数 1技术分 +1 收起 理由
赵志勇 + 1

查看全部评分

回复 使用道具 举报
罗文杰 发表于 2012-6-10 00:53
你这个程序不能排序的……,a[c] 和 a[c++]是同一个元素,相当于 i = c++; i==c  是true;你这里把a[c++] ...

抱歉!你可能看错问题了吧!我没说不能排序!我说的是原因为什么c可以得到最大的角标值
回复 使用道具 举报
jxj4227982333 发表于 2012-6-10 09:31
楼主的这种算法应该是冒泡算法.冒泡算法的原理就是把数组中的元素两两进行比较,把较大的那一个放在后面,直 ...

谢谢!差不多明白啦!:)
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马