关于冒泡法的问题

nenuzhangjun 2007-12-16 03:50:54
哪位好心人帮我看一下下面的代码。这是用冒泡法对一个数组进行排序的代码,但是得出来的结果和预期的不一样。结果为:2,2,-3,3,3,4,6,7。谁帮我看看这个代码。先谢了!
1. int[] srcDatas = new int[]{6,3,4,2,7,2,-3,3};
2. boolean changePosition = true; // 标志是否交换了数组中元素的位置
3. int comparedTimes = 0; // 标志比较的次数
4. int maxComparedTimes = srcDatas.length - 1; // 标志排序过程中最多可能交换的次数
5.
6. //如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
7. while((comparedTimes < maxComparedTimes) && (changePosition)){
8. for(int i = 0; i < (maxComparedTimes - comparedTimes); i++){
9. changePosition = false;
10. if(srcDatas[i] > srcDatas[i + 1]){
11. int temp = srcDatas[i];
12. srcDatas[i] = srcDatas[i + 1];
13. srcDatas[i + 1] = temp;
14. changePosition = true;
15. }
16. }
17. comparedTimes++;
18. }
19. for(int i = 0; i < srcDatas.length; i ++){
20. System.out.print(srcDatas[i] + " ");
21. }
...全文
89 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiang1998 2007-12-19
  • 打赏
  • 举报
回复
好好理解下标志位的作用
nenuzhangjun 2007-12-17
  • 打赏
  • 举报
回复
搞定了
谢谢哥们!
能不能解释一些阿
xiang1998 2007-12-16
  • 打赏
  • 举报
回复

class maopao
{
public static void main(String [] args)
{
int [] srcDatas=new int[]{6,3,4,2,7,2,-3,3};

// 标志是否交换了数组中元素的位置
boolean changePosition=true;

// 标志比较的次数
int comparedTimes=0;

// 标志排序过程中最多可能交换的次数
int maxComparedTimes=srcDatas.length-1;

//如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
while((comparedTimes <= maxComparedTimes) && (changePosition))
{
changePosition = false;
for(int i = 0; i < (maxComparedTimes - comparedTimes); i++)
{
if(srcDatas[i] > srcDatas[i + 1])
{
int temp = srcDatas[i];
srcDatas[i] = srcDatas[i + 1];
srcDatas[i + 1] = temp;
changePosition = true;
}
}
comparedTimes++;
}

//打印出排序后的数组
for(int i=0;i<srcDatas.length;i++)
{
System.out.print(srcDatas[i]+" ");
}
}
}

修改了一个地方,将 changePosition = false; 从for循环中拿出来
philo_xu 2007-12-16
  • 打赏
  • 举报
回复

int[] srcDatas = new int[]{6,3,4,2,7,2,-3,3};
2. boolean changePosition = true; // 标志是否交换了数组中元素的位置
3. int comparedTimes = 0; // 标志比较的次数
4. int maxComparedTimes = srcDatas.length - 1; // 标志排序过程中最多可能交换的次数
5.
6. //如果已经发生的比较次数还没有到达最大次数,而且此前交换过元素位置,则继续
7. while((comparedTimes < maxComparedTimes) && (changePosition)){
8. for(int i = 0; i < (maxComparedTimes - comparedTimes); i++){
9. changePosition = false;
10. if(srcDatas[i] > srcDatas[i + 1]){
11. int temp = srcDatas[i];
12. srcDatas[i] = srcDatas[i + 1];
13. srcDatas[i + 1] = temp;
14. changePosition = true;
15. }
16. }
17. comparedTimes++;
19. for(int i = 0; i < srcDatas.length; i ++){
20. System.out.print(srcDatas[i] + " ");
21. }

18. }

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧