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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© §風過無痕§ 金牌黑马   /  2013-6-20 15:04  /  1281 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 §風過無痕§ 于 2013-6-22 10:30 编辑

以下是作为新手的我仿写的冒泡
  1. namespace 冒泡排序
  2. {
  3.     class Program
  4.     {
  5.         
  6.         static void Main(string[] args)
  7.         {
  8.             int[] arry = { 44,35,62,97,83,16 };
  9.             for (int i = 0; i < arry.Length - 1; i++)//控制比较的趟数,循环了一次表示比较了一趟
  10.             {
  11.                 for (int t = 0; t < arry.Length - 1; t++)
  12.                 {
  13.                     if (arry[t] > arry[t + 1])
  14.                     {
  15.                         int temp = arry[t];
  16.                         arry[t] = arry[t + 1];
  17.                         arry[t+1]=temp ;                    
  18.                     }
  19.                 }
  20.             }
  21.             for (int i = 0; i < arry.Length - 1; i++)
  22.             {
  23.                 Console.WriteLine(arry [i]);
  24.             }
  25.                 Console.ReadKey();
  26.         }
  27.     }
  28. }
复制代码
运行结果不对  请帮忙指点一下

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

9 个回复

倒序浏览
for (int i = 0; i < arry.Length - 1; i++)
{
          for (int t = 0; t < arry.Length - 1; t++)// 修改为:   for (int t = 0; t < arry.Length - 1 - i ; t++)
         {
                if (arry[t] > arry[t + 1])

               {

                        int temp = arry[t];

                        arry[t] = arry[t + 1];

                        arry[t+1]=temp ;                    

                 }

           }

}

回复 使用道具 举报
namespace 冒泡排序
{
    class Program
    {
        
        static void Main(string[] args)
        {
            int[] arry = { 44,35,62,97,83,16 };
            for (int i = 0; i < arry.Length - 1; i++)//控制比较的趟数,循环了一次表示比较
            {
                for (int t = 0; t < arry.Length - 1 - i; t++) //此处应该是t < arry.Length - 1 - i,比价一趟就已经确定了该趟所比价的几个数中的最大值了
                {
                    if (arry[t] > arry[t + 1])
                    {
                        int temp = arry[t];
                        arry[t] = arry[t + 1];
                        arry[t+1]=temp ;                    
                    }
                }
            }
            for (int i = 0; i < arry.Length - 1; i++)
            {
                Console.WriteLine(arry [i]);
            }
                Console.ReadKey();
        }
    }
}

点评

嗯 谢谢指导  发表于 2013-6-21 08:24

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
namespace 冒泡排序
{
    class Program
    {
        
        static void Main(string[] args)
        {
            int[] arry = { 44,35,62,97,83,16 };
            for (int i = 0; i < arry.Length - 1; i++)//控制比较的趟数,循环了一次表示比较
            {
                for (int t = 0; t < arry.Length - 1 - i; t++) //此处应该是t < arry.Length - 1 - i,比价一趟就已经确定了该趟所比价的几个数中的最大值了
                {
                    if (arry[t] > arry[t + 1])
                    {
                        int temp = arry[t];
                        arry[t] = arry[t + 1];
                        arry[t+1]=temp ;                    
                    }
                }
            }
            for (int i = 0; i < arry.Length - 1; i++)
            {
                Console.WriteLine(arry [i]);
            }
                Console.ReadKey();
        }
    }
}
回复 使用道具 举报
你的内层循环应该这样写:
  for (int t = 0; t < arry.Length - 1- i ; t++)    //你内层循环的循环条件写的有问题
                {
                    if (arry[t] > arry[t + 1])
                    {
                        int temp = arry[t];
                        arry[t] = arry[t + 1];
                        arry[t+1]=temp ;                    
                    }
                }

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
正如上面的人所说 你的内循环写错了...
我说下我对冒泡排序的理解吧,希望对你有作用

数组arr 5 1 6 4 2 8 9
脚标0 12345 6


相邻的两个元素进行比较,如果符合条件就换位...

①arr[0]与arr[1]比较如果arr[0]>arr[1]则交换位置

②arr[1]与arr[2]比较如果arr[1]>arr[2]则交换位置

③arr[2]与arr[3]比较如果arr[2]>arr[3]则交换位置

④arr[3]与arr[4]比较如果arr[3]>arr[4]则交换位置

⑤arr[4]与arr[5]比较如果arr[4]>arr[5]则交换位置

⑥arr[5]与arr[6]比较如果arr[5]>arr[6]则交换位置

第一圈下来后,最大值出现在最后位

然后 省去最后一位的比较

数组arr 5 1 6 4 2 8
脚标 0 1 2 3 4 5

......
  1. for(int x=0;x<arr.length-1;x++)

  2. {

  3. for(int y=0;y<arr.length-x-1;y++) //-x 是为了让每一次比较的元素减少 -1避免脚标越界

  4. {

  5. if(arr[y]>arr[y+1])

  6. {

  7. int temp=arr[x];

  8. arr[x] = arr[y];

  9. arr[y] = temp;

  10. }

  11. }

  12. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
所有的循环结束条件,内层循环条件以及数据交换对变量的选择都有小点问题,参考代码:
int[] arry = { 44,35,62,97,83,16 };
            for (int i = 0; i < arry.Length ; i++)//控制比较的趟数,循环了一次表示比较了一趟
            {
                for (int t = i; t <arry.Length ; t++)
                {
                    if (arry[i] > arry[t])
                    {
                        int temp = 0;
                        temp = arry[t];
                        arry[t] = arry[i];
                        arry[i]=temp ;                    
                    }
                }
            }
            for (int i = 0; i < arry.Length ; i++)
            {
                Console.WriteLine(arry [i]);
            }
                Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
苏波 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 §風過無痕§ 于 2013-6-21 08:22 编辑
许庭洲 发表于 2013-6-20 16:07
for (int i = 0; i < arry.Length - 1; i++)
{
          for (int t = 0; t < arry.Length - 1; t++)// 修 ...


谢谢指导!
  1. static void Main(string[] args)

  2. {

  3. int[] arry = { 44,35,62,97,83,16 };

  4. for (int i = 0; i < arry.Length - 1; i++)//控制比较的趟数,循环了一次表示比较了一趟

  5. {

  6. for (int t = 0; t < arry.Length - 1-i; t++)

  7. {

  8. if (arry[t] > arry[t + 1])

  9. {

  10. int temp = arry[t];

  11. arry[t] = arry[t + 1];

  12. arry[t+1]=temp ;

  13. }

  14. }

  15. }

  16. for (int i = 0; i < arry.Length ; i++)

  17. {

  18. Console.WriteLine(arry [i]);

  19. }

  20. Console.ReadKey();

  21. }

复制代码
回复 使用道具 举报
许庭洲 黑马帝 2013-6-21 08:45:05
9#

不客气!:loveliness:
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马