黑马程序员技术交流社区
标题:
冒泡排序
[打印本页]
作者:
邵阳
时间:
2012-6-21 11:29
标题:
冒泡排序
本帖最后由 邵阳 于 2012-6-21 12:05 编辑
/*利用冒泡排序对数组进行排序,不过使相邻的数组元素进行比较,互换位置*/
class Demo
{
public static void main(String[] args)
{
int[]arr={6,3,8,4,9,1,0};
shao_1(arr);
shao(arr);
shao_1(arr);
}
public static void shao(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 arr[y]=arr[y]^arr[y+1];
arr[y+1]=arr[y]^arr[y+1];
arr[y]=arr[y]^arr[y+1];
}
}
}
}
public static void shao_1(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]+"]");
}
}
}
复制代码
我只不过将互换位置换了形式,这个真心不懂啊
结果为啥是
D:\java\zuoye\maopao>javac Demo.java
Demo.java:19: 错误: 需要']'
int arr[y]=arr[y]^arr[y+1];
^
Demo.java:19: 错误: 非法的表达式开始
int arr[y]=arr[y]^arr[y+1];
^
作者:
李天甲
时间:
2012-6-21 11:47
int arr[y]=arr[y]^arr[y+1];
这是怎么回事?呵呵,写错了吧
作者:
陆强强
时间:
2012-6-21 11:49
int arr[y]=arr[y]^arr[y+1];//定义了一个新的变量int,变量名不能用[],所以报错,去掉int就好了。这里不用重新定义arr[y]
arr[y+1]=arr[y]^arr[y+1];
arr[y]=arr[y]^arr[y+1];
作者:
吴琼
时间:
2012-6-21 11:52
/*利用冒泡排序对数组进行排序,不过使相邻的数组元素进行比较,互换位置*/
class Demo
{
public static void main(String[] args)
{
int[]arr={6,3,8,4,9,1,0};
shao_1(arr);
shao(arr);
shao_1(arr);
}
public static void shao(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
arr[y]=arr[y]^arr[y+1]; //兄弟建议你把这个int去掉. arr[y] 就已经是个整型数组了,你这里再定义有点多余. 如果你真的还需要再定义的话
int arr[
y
] y的值也要重新定义,for循环里的变量是局部的.局部变量运算完内存就释放了.
arr[y+1]=arr[y]^arr[y+1];
arr[y]=arr[y]^arr[y+1];
}
}
}
}
public static void shao_1(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]+"]");
}
}
}
作者:
邓杰
时间:
2012-6-21 11:59
/*利用冒泡排序对数组进行排序,不过使相邻的数组元素进行比较,互换位置*/
class Demo1
{
public static void main(String[] args)
{
int[]arr={6,3,8,4,9,1,0};
shao_1(arr);
shao(arr);
shao_1(arr);
}
public static void shao(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])
{
arr[y]=arr[y]^arr[y+1];//如果你在这样写int arr[y]=arr[y]^arr[y+1];就是表示你重新声明了一个
//叫arr[y]的int类型的变量;而这个arr[y]不但和arr数组的中元素重名;
//而且arr[y]里面的y也是个变量;这样的归语法结构是JVM不能识别的;所以
//编译是要报错;
arr[y+1]=arr[y]^arr[y+1];
arr[y]=arr[y]^arr[y+1];
}
}
}
}
public static void shao_1(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]+"]");
}
}
}
作者:
邵阳
时间:
2012-6-21 12:03
吴琼 发表于 2012-6-21 11:52
/*利用冒泡排序对数组进行排序,不过使相邻的数组元素进行比较,互换位置*/
class Demo
{
对y怎么重新定义啊
作者:
张建峰
时间:
2012-6-21 12:06
int arr[y]=arr[y]^arr[y+1];//去掉int就行了,或者你定义一个变量记录,而把下面的arr[y]替换了,如
int a=arr[y]^arr[y+1];
arr[y+1]=a^arr[y+1];
arr[y]=a^arr[y+1];
作者:
陈少文
时间:
2012-6-21 13:42
就是换位时出了问题
写成
int a=arr[y]^arr[y+1];
arr[y+1]=a^arr[y+1];
arr[y]=a^arr[y+1];
换位还有另外一种换法
我写了一个例子程序
冒泡排序
从右往左,依次退出比较
原理:相邻的两个元素比较,如果前一位大于后一位,就换位,元素最后一位出现最值。
后然最后一位不参与排序。此次类推
class Test
{
public static void main(String [] args)
{
int[] arr = {5,4,7,2,9,6,10};
for(int x = 0;x<arr.length-1;x++)
{
//-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;
}
}
}
for(int a = 0;a<arr.length;a++)
{
System.out.println("arr["+a+"]="+arr[a]);
}
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2