java吧 关注:1,218,599贴子:12,668,319
  • 8回复贴,共1

关于冒泡排序中的FOR循环和IF条件问题?求解

只看楼主收藏回复

public class ArrayPaiXu
{
     public static void main(String[] args)
     {
          int temp;
          int s[] = {25,37,55,10};
          for(int i = 0;i<4;i++)
          {
                for(int j= 0;j<4;j++)
                {
                    if(s[i]>s[j])
                    {
                        temp = s[i];
                        s[i] = s[j];
                        s[j] = temp;                                   
                    }
         }
      }
     
      for(int k = 0;k<4;k++)
      {
        System.out.println(s[k]);
      }
   }
}
请懂的兄弟帮忙说明一下, 这个编码的具体执行原理,谢谢了
希望对FOR循环和IF条件那一块能说详细些,非常感谢


IP属地:广东1楼2011-04-11 16:20回复
    希望知道的人帮忙说明,谢谢


    IP属地:广东3楼2011-04-11 18:24
    回复
      外层for循环是控制多少轮的,内层for循环是控制每一轮有几次比较。。if是判断要不要交换位置的,满足条件则交换,反之则不交换。。。。
      对上面的算法可以改进的是:外层for循环的条件可以改成(i<3),因为最后一次只有剩下的两个数了。内层for循环的条件可以改成(j<3-i),每一轮比较后得出的那个数已经是整个数组的最大(小)值了,在下一轮的比较中就没必要参与了。这样可以提高效率。。。。
      我也刚学不久,请多指教。。。。。


      5楼2011-04-11 19:57
      回复
        非常感谢xianxiadian和王972366948的 解答,我刚刚学JAVA,感觉比较抽象,谢谢


        IP属地:广东6楼2011-04-11 20:19
        回复
          第一次循环,把整个数组的最大数字放在数组的最左边,第二次循环找出除了第一次循环找出的最大数之外的其他数组的最大值放在左数第二的位置,以此类推。


          IP属地:广西7楼2011-04-11 20:45
          回复
            小芋头指的第一次循环是内循环,第二次循环是外循环,是这样理解吧?


            IP属地:广东8楼2011-04-11 21:15
            回复
              你就自己一句一句的分析,把每一个值都写出来,到哪句代码是个什么样子的。这个应该好分析。


              IP属地:陕西9楼2011-04-11 21:22
              回复
                我不是打击LZ,但你那个不是冒泡算法。


                10楼2011-04-11 22:06
                回复
                  谢谢楼上指正,纯初学者,这个是一个练习题的答案,看不懂才 发出来,以为是冒泡。嵌套循环还是有点点不明白


                  IP属地:广东11楼2011-04-11 23:00
                  回复