发布网友 发布时间:2022-04-24 11:18
共5个回答
热心网友 时间:2022-05-01 14:02
java中的ArrayList进行冒泡排序,主要是循环遍历取出数据,然后进行比较排序,如下代码:
运行结果如下:
热心网友 时间:2022-05-01 15:20
temp=hxr; //就是这里我不懂啊 引用类型的只是调用引用 这样编写会覆盖掉hxr
al.set(i, hxr1);
al.set(j, temp);
这段代码是利用中间变量temp把hxr和hxr1交换位置。
解释:
①hxr的初始位置在i,hxr1的初始位置在j
②先把hxr保存在中间变量temp中,
③再把hxr1放在位置i上,
④最后把hxr放在位置j上。
如果没有第②步的话,做第③步时hxr1对象就会把hxr对象覆盖了。
补充说明:
关于你说的这个:引用类型的只是调用引用 这样编写会覆盖掉hxr
你在Eclipse里面单步调试一下就知道了。
做完第③步后,hxr1并没有把temp和hxr覆盖了。
这样看的话,没有中间变量temp也能完成交换。
出现这样的状况是因为java的引用类型是介于指针和引用之间的一个东西.
你把temp=hxr;去掉,并在al.set(i, hxr1);之前加上hxr.tickets = 2之类的话改变hxr的值,这是你再看看hxr的值与List al中第i个的值,再往下执行,好好观察每个变量的数值变换情况。
仔细体会一下,很快就会明白了!
热心网友 时间:2022-05-01 16:55
楼上的真倒,虽然算法是一样的,但是人问的是JAVA中ArrayList对象的冒泡排序,你却搞个C的出来,好歹也改下啊.
---------------------------------------------------------
//main()方法自己写吧,为了方便,假定ArrayList存放的是Integer对象
//另外,代码是给你写了!但是希望以后不要看到你再上来让人帮你写代码了,把自己写的代码贴上来让人帮你改倒还可取.
public class Sort {
public static void bubbleSort(List list)
{
int size = list.size;
Integer[] arr = (Integer[])list.toArray();//你的类实现Comparable接口后,这里的类型换下就是了.
Integer iTmp;
for (int i = 1; i < size; i++)
{
boolean flag = false;
for (int j = size - 1; j >= i; j--)
{
if (arr[j].compareTo(arr[j - 1]) > 0)
{
iTmp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = iTmp;
flag = true;
}
}
if (!flag) return;
}
}
}
===================================
问题补充的回复:
让你的类实现Comparable接口即可.
Arrays和Collections里的sort方法都没有用冒泡排序的,因为冒泡排序效率实在太低了.只能用来作算法演示而已,实际应用中不会用到它的.
热心网友 时间:2022-05-01 18:46
#include<stdio.h>
#include<conio.h>
#define TURE 1
#define FLASE 0
void BubbleSort(int a[],int n)
{
int i,j;
int change;
int temp;
for(i=n-1,change=TURE;i>=1&&change;i--)
{
change=FLASE;
for(j=1;j<=i;j++)
if(a[j]>a[j+1])
{
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
change=TURE;
}
}
}
void Print(int a[],int n)
{
int i;
for(i=1;i<=n;i++)
printf(" a[%d]=%d",i,a[i]);
}
main()
{
int a[100];
int i,n;
printf("\nInput the Length:\n");
scanf("%d",&n);
printf("\nInput the number:\n");
for(i=1;i<=n;i++)
scanf("%d",&a[i]);
printf("\nBefore:\n");
Print(a,n);
BubbleSort(a,n);
printf("\nAfter:\n");
Print(a,n);
getch();
printf("Press any key to continue...");
clrscr();
}
热心网友 时间:2022-05-01 20:54
记得arraylist里面有个sort方法,就可以进行排序了,为啥还要用冒泡呢!?如果真的要做冒泡的话,你用下标来取值进行比较咯