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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 郭佳佳 中级黑马   /  2012-7-22 17:28  /  1421 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

为什么我按照苏坤老师教的冒泡排序代码运行的结果是从大到小有问题,从小到大没问题,很是纳闷。看啦看代码没问题啊?你们有谁遇见过这问题吗?

评分

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

查看全部评分

3 个回复

倒序浏览
通过排序方式,可以知道是用数组中的元素挨个比较,
如果前面的元素的值比它下一个角标的元素大,
则进行位置置换,然后再用第二个角标的元素与下一个角标的元素进行比较,
同样如果下一个角标的元素比它小,则进行位置置换,
这样当比较到arr.length-1个元素时已经没有 和它进行的比较的元素了,
当第一轮比较结束后,我们可以知道最后一个角标的元素为该数组中的最大值,
按照同样的原理进行下一次比较,依次获取了比较大的元素的值。
实现代码:
Public static void bubbleSort(int[] arr)
{
For(int x=0;x<arr.length-1;x++)
{
For(int y=0;y<arr.length-1-x;y++)//-1的目的是因为遍历到最后避免角标越界,-x是因为随着x的递增,参与比较的元素递减,       
{
If(arr[y]>arr[y+1])
{
//位置置换
}
}
}
}

评分

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

查看全部评分

回复 使用道具 举报
public class MaoPao{
public static void text(int[] arr)
{
for(int i=0;i<arr.length-1;i++)//外循环控制总体循环次数
{
for(int a=0;a<arr.length-1-i;a++) //内循环中比较交换元素位置
{
     if(arr[a]<arr[a+1])
       {
        int temp=arr[a];
         arr[a]=arr[a+1];
         arr[a+1]=temp;
        }
}
}
}
public static void biali(int[] brr)//定义功能 将数组中的元素遍历输出 注意 最后一个元素输出时后面不带逗号
{
   for(int b=0;b<brr.length;b++)
  {
  if(b==brr.length-1)
{System.out.println(brr[b]);}
else
System.out.print(brr[b]+",");
}
}
public static void main(String[] args)
{
  int[] ying=new int[]{9,3,5,7,25,12,1,4};
System.out.println("排序前:");
biali(ying);
System.out.println("排序后:");
text(ying);  //调用text方法 对数组元素进行排序
biali(ying);
}
}

评分

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

查看全部评分

回复 使用道具 举报
本帖最后由 罗京雨 于 2012-7-22 18:22 编辑

冒泡排序是相邻两个比较大的往后放,小的往前放,大的沉下去了,小的上升了。是不是你在用第三方变量temp赋值时,右边的值赋给左边时赋值错了,或者顺序错了。
比如这样
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
假如写反了
int temp = arr[y];
arr[y+1] = arr[y]; //比如这里
arr[y+1] = temp;

arr[y+1]把值即赋给arr[y],又赋给temp
这样写编译语法没错,但在运行时就出错了。

评分

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

查看全部评分

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