关于java冒泡排序:这个是java冒泡排序的那块

这个是java冒泡排序的那块,第一行是原数组顺序,第二行我想要的结果是数组从小到大排序,我也不知道自己错哪了,跪求高手解答

第1个回答  2012-09-26
把if(index!=x) swap(arr,x,index);这一句移到y-for循环里面,并且在后面再加一句index=x;就行了。
完整的程序如下:(改动的地方见注释)
public class Demo {
public static void printArray(int[] arr){
for(int x = 0;x<arr.length;x++){
if(x!=arr.length-1)
System.out.print(arr[x]+"\t");
else
System.out.println(arr[x]);
}
}
public static void main(String[] args){
int[] arr =new int[] {34,19,109,11,3,56};
printArray(arr);
selectSort(arr);
printArray(arr);
}
public static void swap(int[] arr,int x,int index){
int temp = arr[x];
arr[x]=arr[index];
arr[index]=temp;
}
public static void selectSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
int num=arr[x];
int index=x;
for(int y=x+1;y<arr.length;y++){
if(arr[y]<arr[x]){
num=arr[y];
index=y;
}
//把下面的if语句移到y-for循环里面
if(index!=x){
swap(arr,x,index);
index=x; //这里加一句
}
}
}
}
}
运行结果:
34 19 109 11 3 56
3 11 19 34 56 109
第2个回答  2012-09-26
第一重循环有问题,自己对比着看吧.
public static void main(String[] args) {
int[] num={34,19,109,11,3,56};
System.out.println("排序前:");
for(int k=0;k<num.length;k++){
System.out.print(num[k]+" ");
}
int tmp=0;
for(int i=0;i<num.length;i++){
for(int j=i+1;j<num.length;j++){
if(num[i]>num[j]){
tmp=num[i];
num[i]=num[j];
num[j]=tmp;
}
}
}
System.out.println("\n排序后:");
for(int k=0;k<num.length;k++){
System.out.print(num[k]+" ");
}
}
第3个回答  2012-09-26
首先声明一下你这叫选择排序不叫冒泡好不好。。。
然后说下你的错误
你的if(index!=x){
swap(arr,x,index)
}
放错地方了
应该放到内层for循环外边本回答被提问者和网友采纳
第4个回答  2012-09-26
看这个
public class TestMaoPao{
public static void main(String[] args){
int[] item = new int[]{10,4,39,22,45,88,99,43,21,56};
for(int i = 0;i<item.length;i++){
for(int j = 0;j<item.length-i-1;j++){
if(item[j]>item[j+1]){
item[j] = item[j]^item[j+1];
item[j+1] = item[j]^item[j+1];
item[j] = item[j]^item[j+1];
}
}
}
for(int i : item){
System.out.println(i);
}
}
}
相似回答