`

Java List集合冒泡法排序的两种实现

    博客分类:
  • Java
 
阅读更多

 冒泡排序(Bubble Sort)是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。

  冒泡排序算法的运作如下:

 比较相邻的元素。如果第一个比第二个大,就交换他们两个。

 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。

 针对所有的元素重复以上的步骤,除了最后一个。

 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

 

方法一:

1. 如果集合的值为int类型

 

 

public class TT {

	public static void main(String[] args) {
		List<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());
		}
	}
}

 

 

2. 如果集合的值为string类型("11"),并且包含空值(此处用"-"代替)

 

 

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("-");
		list.add("76");
		list.add("-");
		list.add("786");
		list.add("43");
		list.add("-");
		list.add("432");
		list.add("10");

		List<String> nullList = new ArrayList<String>();
		List<String> dataList = new ArrayList<String>();

		for (String s : list) {
			if ("-".equals(s)) {
				nullList.add(s);
			} else {
				dataList.add(s);
			}
		}

		for (int i = 0; i < dataList.size() - 1; i++) {
			for (int j = 1; j < dataList.size() - i; j++) {
				Integer a = Integer.parseInt(dataList.get(j - 1));
				Integer b = Integer.parseInt(dataList.get(j));

				if (a.compareTo(b) > 0) { // 比较两个整数的大小

					String temp = dataList.get(j - 1);
					dataList.set((j - 1), dataList.get(j));
					dataList.set(j, temp);
				}
			}
		}

		dataList.addAll(nullList);
		list = dataList;

		for (String s : list) {
			System.out.println(s);
		}
	}
 

 

 

方法二:

直接用Collections.sort进行排序

 

先定义ValComparator类, 

 

import java.util.Comparator;

public class ValComparator implements Comparator<String> {

	public int compare(String o1, String o2) {
		int seq1 = 0;
		int seq2 = 0;
		try {
			seq1 = Integer.parseInt(o1);
			seq2 = Integer.parseInt(o2);
		} catch (Exception e) {
		}

		return seq1 - seq2;
	}
}
 

 

主程序:

 

public static void main(String[] args) {
		List<String> list = new ArrayList<String>();
		list.add("76");
		list.add("786");
		list.add("43");
		list.add("432");
		list.add("10");

		Collections.sort(list, new ValComparator());

		for (String s : list) {
			System.out.println(s);
		}
	}
 

 

 

 

分享到:
评论

相关推荐

    数据结构之JAVA排序JAVASORT.pdf

    在Java中,排序主要涉及到两种场景:数组和集合。 1. **数组排序**:对于基本类型的数组,Java提供了`Arrays.sort()`方法,它支持整型、浮点型、字符型以及对象引用类型的排序。这个方法内部使用了快速排序和插入...

    java排序案例

    5. **归并排序**:也是分治法的一个典型应用,将数组分成两半,分别排序,然后合并两个已排序的部分。 在实际开发中,我们通常会选择效率更高的排序算法,例如`Arrays.sort()`和`Collections.sort()`使用的都是高效...

    java数据结构算法实现

    在Java中,这些概念可以通过Java集合框架中的接口和类来实现,例如List、Set、Map等接口,以及ArrayList、LinkedList、HashMap等实现类。 总的来说,Java数据结构和算法的实现涉及到了数据的组织、存储和操作,以及...

    java面试题大集合

    1. 实现序列化的方式有两种:实现`Serializable`接口和`Externalizable`接口。 2. 排序算法实现可参考前面的快速排序示例。 #### 十四、如在COLLECTION框架中,实现比较要实现什么样的接口? 为了实现在集合框架中...

    Java程序设计 3 数组与集合.pptx

    Java程序设计之数组与集合 Java程序设计第三章:数组与集合 数组是一组具有相同类型的有序数据的集合。数组中的一个数据成员称为数组元素。数组生成后,数组长度不可改变。 arrays的定义与初始化 * 声明:int ...

    2014年Java最全面试题以及答案.

    快速排序是通过选择一个“基准”元素,然后将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素,然后递归排序两个子数组。 8. Overload和Override的区别。Overloaded的方法是否可以改变...

    Java数据结构和算法

    主要有ArrayList和LinkedList两种实现方式。 - **Set**:不允许重复元素的集合。HashSet和TreeSet是常见的Set实现。 - **Map**:键值对集合,其中键不能重复。HashMap和TreeMap是最常用的Map实现。 #### 3. 栈...

    Java sort算法学习

    `sort`算法是Java标准库`java.util`包中的一个关键工具,它提供了一种高效地对数组或集合进行排序的方法。本资料旨在深入探讨Java中的排序算法,帮助开发者理解和应用它们。 Java中的排序主要涉及到`Arrays.sort()`...

    基于Java的数据结构提取器.zip

    9. **排序和搜索算法**:Java中提供了多种排序算法的实现,如快速排序、归并排序、冒泡排序等。同时,有线性搜索、二分搜索等搜索算法。 10. **优先队列(堆)**:PriorityQueue是Java中实现优先队列的类,底层基于...

    java-datestruct.rar_数据结构

    7. **Set**:Set接口不允许重复元素,Java的HashSet和TreeSet是两种常见的实现。 8. **Map**:Map接口存储键值对,Java的HashMap、TreeMap和LinkedHashMap等实现了Map接口。 9. **哈希表(HashMap)**:哈希表提供...

    Java 与 数据结构

    Java的Stack类和Queue接口分别代表这两种结构。栈常用于表达式求值、递归和回溯算法;队列则常见于任务调度和多线程环境。 4. **集合框架**:Java集合框架包括List、Set和Map接口,以及ArrayList、LinkedList、...

    java算法锦囊必备

    4. **队列(Queue)**:队列是一种先进先出(FIFO)的数据结构,Java提供了LinkedList和ArrayDeque两种实现方式。 5. **堆(Heap)**:堆是一种特殊的树形数据结构,通常用于实现优先队列。Java的PriorityQueue类...

    数据结构与算法分析JAVA语言描述

    4. **集合框架**:Java的集合框架包括List、Set和Map接口,以及ArrayList、LinkedList、HashSet、HashMap等具体实现。这些接口和类提供了丰富的数据存储和操作功能,是Java程序设计的基础。 5. **树结构**:二叉树...

    这是数据结构和算法的集合_C++_Java_下载.zip

    这个压缩包“这是数据结构和算法的集合_C++_Java_下载.zip”显然包含了与这两个编程语言相关的数据结构和算法实现。C++和Java都是广泛使用的编程语言,特别适合进行系统级编程和企业级应用开发,同时也被广泛用于...

    Java版 数据结构与算法

    Java中的数组有两种:一维数组和多维数组。数组的缺点是大小不可变,插入和删除操作复杂。 2. **链表**:在链表中,元素不是连续存储的,而是通过节点的指针连接。Java中的LinkedList实现了List接口,提供了高效的...

    java数据结构算法

    了解数组的特性,如下标范围、遍历方式以及数组排序(如冒泡排序、插入排序、选择排序等)是必要的。 2. **链表**:链表是一种动态数据结构,每个节点包含数据和指向下一个节点的引用。Java中有单链表(LinkedList...

    Java数据结构和算法中文第二版

    在Java中,常见的算法有排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索(线性搜索、二分搜索)、图算法(深度优先搜索、广度优先搜索)、动态规划、贪心算法、回溯法等。 本书第二版可能对第一...

Global site tag (gtag.js) - Google Analytics