冒泡排序(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中,排序主要涉及到两种场景:数组和集合。 1. **数组排序**:对于基本类型的数组,Java提供了`Arrays.sort()`方法,它支持整型、浮点型、字符型以及对象引用类型的排序。这个方法内部使用了快速排序和插入...
5. **归并排序**:也是分治法的一个典型应用,将数组分成两半,分别排序,然后合并两个已排序的部分。 在实际开发中,我们通常会选择效率更高的排序算法,例如`Arrays.sort()`和`Collections.sort()`使用的都是高效...
在Java中,这些概念可以通过Java集合框架中的接口和类来实现,例如List、Set、Map等接口,以及ArrayList、LinkedList、HashMap等实现类。 总的来说,Java数据结构和算法的实现涉及到了数据的组织、存储和操作,以及...
1. 实现序列化的方式有两种:实现`Serializable`接口和`Externalizable`接口。 2. 排序算法实现可参考前面的快速排序示例。 #### 十四、如在COLLECTION框架中,实现比较要实现什么样的接口? 为了实现在集合框架中...
Java程序设计之数组与集合 Java程序设计第三章:数组与集合 数组是一组具有相同类型的有序数据的集合。数组中的一个数据成员称为数组元素。数组生成后,数组长度不可改变。 arrays的定义与初始化 * 声明:int ...
快速排序是通过选择一个“基准”元素,然后将数组分为两个子数组,一个包含小于基准的元素,另一个包含大于基准的元素,然后递归排序两个子数组。 8. Overload和Override的区别。Overloaded的方法是否可以改变...
主要有ArrayList和LinkedList两种实现方式。 - **Set**:不允许重复元素的集合。HashSet和TreeSet是常见的Set实现。 - **Map**:键值对集合,其中键不能重复。HashMap和TreeMap是最常用的Map实现。 #### 3. 栈...
`sort`算法是Java标准库`java.util`包中的一个关键工具,它提供了一种高效地对数组或集合进行排序的方法。本资料旨在深入探讨Java中的排序算法,帮助开发者理解和应用它们。 Java中的排序主要涉及到`Arrays.sort()`...
9. **排序和搜索算法**:Java中提供了多种排序算法的实现,如快速排序、归并排序、冒泡排序等。同时,有线性搜索、二分搜索等搜索算法。 10. **优先队列(堆)**:PriorityQueue是Java中实现优先队列的类,底层基于...
7. **Set**:Set接口不允许重复元素,Java的HashSet和TreeSet是两种常见的实现。 8. **Map**:Map接口存储键值对,Java的HashMap、TreeMap和LinkedHashMap等实现了Map接口。 9. **哈希表(HashMap)**:哈希表提供...
Java的Stack类和Queue接口分别代表这两种结构。栈常用于表达式求值、递归和回溯算法;队列则常见于任务调度和多线程环境。 4. **集合框架**:Java集合框架包括List、Set和Map接口,以及ArrayList、LinkedList、...
4. **队列(Queue)**:队列是一种先进先出(FIFO)的数据结构,Java提供了LinkedList和ArrayDeque两种实现方式。 5. **堆(Heap)**:堆是一种特殊的树形数据结构,通常用于实现优先队列。Java的PriorityQueue类...
用JAVA实现一种排序,JAVA类实现序列化的方法 - **排序**:如快速排序。 - **序列化**:实现`Serializable`接口或使用`Externalizable`接口。 #### 14. 如在COLLECTION框架中,实现比较要实现什么样的接口? ...
这个压缩包“这是数据结构和算法的集合_C++_Java_下载.zip”显然包含了与这两个编程语言相关的数据结构和算法实现。C++和Java都是广泛使用的编程语言,特别适合进行系统级编程和企业级应用开发,同时也被广泛用于...
Java中的数组有两种:一维数组和多维数组。数组的缺点是大小不可变,插入和删除操作复杂。 2. **链表**:在链表中,元素不是连续存储的,而是通过节点的指针连接。Java中的LinkedList实现了List接口,提供了高效的...
了解数组的特性,如下标范围、遍历方式以及数组排序(如冒泡排序、插入排序、选择排序等)是必要的。 2. **链表**:链表是一种动态数据结构,每个节点包含数据和指向下一个节点的引用。Java中有单链表(LinkedList...
13. **用JAVA实现一种排序,JAVA类实现序列化的方法(二种)?** - 排序方法参见上文快速排序示例。 - 序列化实现方法:实现`Serializable`接口或实现`Externalizable`接口。 14. **如在COLLECTION框架中,实现比较...
在Java中,常见的算法有排序(冒泡排序、选择排序、插入排序、快速排序、归并排序等)、搜索(线性搜索、二分搜索)、图算法(深度优先搜索、广度优先搜索)、动态规划、贪心算法、回溯法等。 本书第二版可能对第一...
用JAVA实现一种排序,JAVA类实现序列化的方法(二种)** - **排序算法**: 如上文所述的快速排序。 - **序列化实现**: - 实现 `Serializable` 接口:直接在类声明中添加 `implements Serializable`。 - 使用 `...