黑马程序员技术交流社区
标题: 根据毕老师的视频发现的冒泡排序问题 [打印本页]
作者: fa20091001 时间: 2014-4-3 23:03
标题: 根据毕老师的视频发现的冒泡排序问题
本帖最后由 fa20091001 于 2014-4-3 23:06 编辑
class ArrayTest
{
public static void main(String[] args)
{
int [] arr = {4,5,21,6,41,7,2};
System.out.print("未排序前:");
print(arr);
bubble(arr);
System.out.print("排序后:");
print(arr);
}
//冒泡排序
public static void bubble(int [] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y = x;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
int temp =arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
//遍历
public static void print(int [] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
-
QQ截图20140403230056.png
(1.68 KB, 下载次数: 16)
作者: fa20091001 时间: 2014-4-3 23:07
国际惯例,沙发!!
作者: lwy0319 时间: 2014-4-4 02:04
classArrayTest
{
public static void main(String[] args)
{
int [] arr = {4,5,21,6,41,7,2};
System.out.print("未排序前:");
print(arr);
bubble(arr);
System.out.print("排序后:");
print(arr);
}
//冒泡排序
public static void bubble(int [] arr)
{
for(int x=1;x<arr.length;x++)
{
for(int y = 0;y<arr.length;y++)
{
if(arr[y]>arr[x])
{
int temp =arr[y];
arr[y]=arr[x];
arr[x]=temp;
}
}
}
}
//遍历
public static void print(int [] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
作者: 张治国 时间: 2014-4-4 08:07
本帖最后由 张治国 于 2014-4-4 08:09 编辑
同学,这个错误主要是粗心导致的,在嵌套for循环的内循环中 变量 y=0;
public static void bubble(int [] arr)
{
for(int x=0;x<arr.length-1;x++)
{
for(int y = 0;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
int temp =arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
作者: alucard 时间: 2014-4-4 08:55
本帖最后由 alucard 于 2014-4-4 09:01 编辑
同学你还是没有搞清楚冒泡排序,你写的代码y循环的初始值是y=x,应该是y=0,冒泡排序每次都是从第一位开始比较,我给你画个图说明下。
publicstatic void bubbleSort(int[] arr)
{
for (int x=0;x<arr.length-1 ;x++ )
{
for (inty=0;y<arr.length-x-1 ;y++ )
{
int temp;
if (arr[y]>arr[y+1])
{
temp = arr[y];
arr[y] = arr[y+1];
arr[y+1] = temp;
}
}
}
}
作者: 黄泉 时间: 2014-4-4 09:53
class ArrayTest
{
public static void main(String[] args)
{
int [] arr = {4,5,21,6,41,7,2};
System.out.print("未排序前:");
print(arr);
bubble(arr);
System.out.print("排序后:");
print(arr);
}
//冒泡排序
public static void bubble(int [] arr)
{
for(int x=0;x<arr.length-1;x++)
{
//for(int y = x;y<arr.length-x-1;y++)
//因为你使用的是冒泡排序,是将相邻的两个值进行比较。也就是将最大值现放在最后。
//所以判断条件是 y<arr.length-x-1 每一次循环后,获取的最大值不会参与比较。
//y = x 每一次循环后,arr[x-1]的角标不会参与比较。所以会出现错误的结果。要注意啦。
for(int y = 0;y<arr.length-x-1;y++)
{
if(arr[y]>arr[y+1])
{
int temp =arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
}
}
}
}
//遍历
public static void print(int [] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x!=arr.length-1)
System.out.print(arr[x]+",");
else
System.out.println(arr[x]+"]");
}
}
}
作者: 2528870651 时间: 2014-4-4 10:32
本帖最后由 2528870651 于 2014-4-4 10:34 编辑
- class ArrayTest
- {
- public static void main(String[] args)
- {
- int [] arr = {4,5,21,6,41,7,2};
- System.out.print("未排序前:");
- print(arr);
- bubble(arr);
- System.out.print("排序后:");
- print(arr);
- }
- //冒泡排序
- public static void bubble(int [] arr)
- {
- for(int x=0;x<arr.length-1;x++)
- {
- for(int y = 0;y<arr.length-x-1;y++)
- //这里把y=x 改成y=0,你是比较arr[y]和arr[y+1],不管x的事,不要把x赋给y
- {
- if(arr[y]>arr[y+1])
- {
- int temp =arr[y];
- arr[y]=arr[y+1];
- arr[y+1]=temp;
- }
- }
- }
- }
- //遍历
- public static void print(int [] arr)
- {
- System.out.print("[");
- for(int x=0;x<arr.length;x++)
- {
- if(x!=arr.length-1)
- System.out.print(arr[x]+",");
- else
- System.out.println(arr[x]+"]");
- }
- }
- }
复制代码
作者: 一世英明 时间: 2014-4-4 13:09
楼上都是高手,我就不说了!
楼主,技术分借用一下啊!!
作者: fa20091001 时间: 2014-4-13 22:12
谢谢你,非常感谢!你的问题完美的解决了我。
作者: fa20091001 时间: 2014-4-13 22:13
哦,是的谢谢你啦!非常感谢。是我太粗心啦!
作者: fa20091001 时间: 2014-4-13 22:15
谢谢你的热心回答,是我太粗心啦!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |