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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 许庭洲 黑马帝   /  2012-4-28 13:12  /  1924 人查看  /  11 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请求高手,下面冒泡排序主要程序,该程序运行通不过,请哪位高手帮忙指正!
int [] array = new int;
int temp = 0 ;
for (int i = 0 ; i < array.Length; i++)
{
  for (int j = i + 1 ; j < array.Length-1 ; j++)
  {
    if (array[j] < array[i])
    {
      temp = array[i] ;
      array[i] = array[j] ;
      array[j] = temp ;
    }
  }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

11 个回复

正序浏览
仔细看了下仁兄的代码,发现仁兄连冒泡算法的基本思想都没搞清,数组也确实是定义错了,而且看仁兄在for循环里面写的,就拿的arr[i]和arr[j]相比,这个不是选择排序的基本思想嘛。冒泡排序的基本思想是相邻的两个元素进行比较,用i控制的是遍历的次数,每次遍历完之后所要求的最值往后沉,所以下次再进行遍历的时候,最后一个元素就可以不要在参与到比较里面来了,因此j的条件有一个-i的值,因为你遍历了几次那么就有几个数可以不参与比较了,因为是相邻的值进行比较所以j的值需要减1,因为是拿arr[j]和arr[j+1]进行比较,所以j的条件需减1要不然就会有数组越界的错误。在此讲的可能不是很清楚,希望楼主再去看下相关视频。

点评

非常感谢程序员李思!  发表于 2012-5-2 14:34

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
数组定义出错,int [] array=new int[];

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int [] array = new int;
数组定义错了。
冒泡排序的两层循环:
int temp = 0;
for(int i =0;i<array.Lenght-1; i++)
  {
    for(int j =0;j<array.Lenght--1-i; j++)
       {
          if(array[j]<array[j+1])
           {
                     int temp = array[j];
                     array[j] = array[j+1];
                     array[j+!] = temp;
           }

      }
}
请参照一下。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
张博 中级黑马 2012-4-30 22:48:23
9#
数组定义的不对啊,int[] name={2,12,4,23,4,23,6,6,7,54}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int [] array = new int; 不对,不能这样定义吧

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
过客 中级黑马 2012-4-28 17:22:31
7#
数组定义错了,而且数组没有值,第二层for循环的条件应该为(arr.Length - i - 1)。

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int[] array = new int[]{10,15,22,50,46,85};
            int temp = 0 ;
            for (int i = 0 ; i < array.Length; i++)
                {
                  for (int j = 0; j < array.Length-1-i ; j++)
                      {
                        if (array[j] < array[j+1])
                           {
                             temp = array[j] ;
                             array[j] = array[j+1] ;
                             array[j+1] = temp ;
                           }
                      }
                }
            for (int a = 0; a < 6; a++)
            {
                Console.WriteLine(array[a]);
            }
            Console.ReadKey();

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
int[] sort(int[] arr)
{
            
            for (int i = 0; i < arr.Length; i++)
            {
              
                for (int j = 0; j < arr.Length - i - 1; j++)
                {
                    if (arr[j] > arr[j + 1])
                    {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                        
                    }
                }
                return arr;
            }
}

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
定义数组出错了

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
你实例话一组数字啊,你的“int [] array = new int”不对啊,要不你这样写啊
int [] array = new int[]{};
或则int [] array = new int[10];
回复 使用道具 举报
int[] math = { 1, 7, 81, 1, 87, 10 };
            int hold = 0, j;
            for (int i = 0; i < math.Length; i++)
            {
              
                for (j = 0; j < math.Length - i - 1; j++)
                {
                    if (math[j] > math[j + 1])
                    {
                        hold = math[j];
                        math[j] = math[j + 1];
                        math[j + 1] = hold;
                        
                    }
                }
            }

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马