Java中的ArrayList怎么进行冒泡排序

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java中的ArrayList怎么进行冒泡排序相关的知识,希望对你有一定的参考价值。

要求必须用冒泡啊
如果动态数组里的是引用类型的怎么办啊
HXR 是我自己建的类 hxr,hxr1是声明的实力化对象
public void PaiXu()
HXR temp;
for(int i=0;i<al.size();i++)
hxr=al.get(i);
for(int j=1;j<al.size();j++)
hxr1=al.get(j);
if(hxr.tickets<hxr1.tickets)
temp=hxr; //就是这里我不懂啊 引用类型的只是调用引用 这样编写会覆盖掉hxr
al.set(i, hxr1);
al.set(j, temp);


java中的ArrayList进行冒泡排序,主要是循环遍历取出数据,然后进行比较排序,如下代码:

package com.qiu.lin.he;

import java.util.ArrayList;

public class Ceshi 
public static void main(String[] args) 
ArrayList<Integer> list = new ArrayList<Integer>();
list.add(76);
list.add(4);
list.add(786);
list.add(43);
list.add(21);
list.add(432);
list.add(10);
for (int i = 0; i < list.size() - 1; i++) 
for (int j = 1; j < list.size() - i; j++) 
Integer a;
if (list.get(j - 1).compareTo(list.get(j)) > 0)  // 比较两个整数的大小

a = list.get(j - 1);
list.set((j - 1), list.get(j));
list.set(j, a);//交换数据



for (Integer s : list) 
System.out.println(s.intValue());//输出arraylist的数据


运行结果如下:

参考技术A 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个的值,再往下执行,好好观察每个变量的数值变换情况。
仔细体会一下,很快就会明白了!本回答被提问者采纳
参考技术B 楼上的真倒,虽然算法是一样的,但是人问的是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方法都没有用冒泡排序的,因为冒泡排序效率实在太低了.只能用来作算法演示而已,实际应用中不会用到它的.
参考技术C #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();
参考技术D 记得arraylist里面有个sort方法,就可以进行排序了,为啥还要用冒泡呢!?如果真的要做冒泡的话,你用下标来取值进行比较咯

java中怎么对二维数组的列排序?

java中怎么对二维数组的列排序?谢谢指教!

这个就是可以直接排组的,根据数组的定义来。如a[][]=(1,2),(3,4)......类似这些追问

排序,已知一个打乱的二维数组,按列排序

应该怎么做呢

参考技术A 列排序的依据是什么呢?追问

升序降序差别很大吗?

应该是一样的

追答

我说的依据是,以什么为关键字对列进行排序?是每列的行首元素、最大元素、元素之和还是方差,还是其他什么依据?

追问

每列的行首元素,亲

追答import java.util.Arrays;

public class Test 
    public static<T extends Comparable<? super T>> void sort(T a[][])
sort(a, true);
    
    
    public static<T extends Comparable<? super T>> void sort(T a[][], boolean ascend)
sortHelper(a, 0, a.length - 1, ascend);
    
    
    private static<T extends Comparable<? super T>> void sortHelper(T[][] arr, int l, int r, 
    boolean ascend)
if(l>=r) return;
int i = l;
int j = r;
T[] key = arr[l];

while(i<j) 
    while(i<j&&compare(key[0], arr[j][0], ascend)) j--;
    arr[i] = arr[j];
    
    while(i<j&&compare(key[0], arr[j][0], !ascend)) i++;
    arr[j] = arr[i];


arr[i] = key;
sortHelper(arr, l, i-1, ascend);
sortHelper(arr, i+1, r, ascend);
    
    
    private static<T extends Comparable<? super T>> boolean compare(T x, T y, boolean ascend) 
return ascend ? x.compareTo(y) < 0 : x.compareTo(y) > 0;
    
    
    public static void main(String args[]) 
Integer[][] a = new Integer[4][];
a[0] = new Integer[]5,6;
a[1] = new Integer[] 1,2,3;
a[2] = new Integer[] 4,5,6,7;
a[3] = new Integer[] 8,9;
sort(a);
for(Integer[] i : a) 
    System.out.println(Arrays.toString(i));

    

追问

虽然看不很懂,但还是谢谢你

本回答被提问者采纳

以上是关于Java中的ArrayList怎么进行冒泡排序的主要内容,如果未能解决你的问题,请参考以下文章

用Java中ArrayList类实现一个冒泡排序

对 2D ArrayList 进行冒泡排序

冒泡实现ArrayList里面的对象排序

ArrayList 冒泡排序 帮忙看下这个,里面用set()如何排序啊?

使用 RNG 的 Arraylist 冒泡排序

已知一个int型数组arraylist[],写出冒泡排序法