`

Java列表排序

 
阅读更多

记录遇到过的所有排序实现, 持续更新.

 

1. 冒泡排序: 效率O(N*N),比较N*N/2,交换N*N/4

public void bubbleSort() {
	int[] arr = {1, 6, 3, 5, 10, 4};
	int arrLen = arr.length;

	// 内层循环变量
	int in;
		
	// 外层循环变量
	int out;

	// 外层循环次数 = 列表长度 - 1
	for (out = arrLen - 1; out > 0; out -- ) {

		// 内层循环总是从最前面开始
		// 依次与列表中每个元素比较
		// 排除已经比较过的值, out及其之后的值
		for (in = 0; in < out; in ++) {

			// 当前排序方式为升序排序
			// 即: arr[0] < arr[1] < ... < arr[arr.length - 1]
			if (arr[in] > arr[in + 1]) {
				// 每当遇到满足条件(当前值大于后一个值)时, 就交换值
				swap(arr, in, in + 1);
			}
		}
	}
}

2. 选择排序: 效率:O(N*N),比较N*N/2,交换<N

public void selectSort() {
	int[] a = {1, 6, 3, 5, 10, 4};
	int in;		// 内层循环控制
	int out;	// 外层循环次数
	int min;	// 最小值下标

	// 外层循环次数 = 列表长度 - 1
	for(out=0, len = a.length - 1; out<len; out++) {

		// 假设第一个总是最小值
		// 这一步相当于得到天平秤中其中一个盘中的砝码
		min=out;

		// in=out+1 : 当前值无需与当前值比较
		for(in=out+1; in<nElems; in++)

			// in下标所指定的值是天平秤中另一个砝码
			// 比较符号"<"就是称的规则
			// 当前需要的是较小的值放在左边, 即升序排序
			if(a[in]<a[min])
				min=in;

		// 自己与自己交换无任何意义
		if (out != min)
			swap(out,min);
	}
}

3. 插入排序, 序列中部分有序时效率较高, 逆序排序效率几乎与冒泡无异. 效率:O(N*N), 比较N*N/4,复制N*N/4

Public void InsertionSort() {
	int[] a = {3, 5, 7, 6, 10, 4};

	// 外层循环次数 = 列表长度 - 1
	for(int out=1, len = a.length - 1; out<len; out++) {
		int temp=a[out]
		int in=out;

		// 从左到右依次比较, 
		// 其比较规则类似于冒泡,
		// 不同点在于每次排序列表长度都比上一次加1, 且结束条件是找到首个满足交换条件(a[in‐1]>temp)的值
		// 例如:
		//     当 out=3, tmp=6;时
		//     当前循环执行次数为2次
		while(in>0 && a[in‐1]<temp) {
			a[in]=a[in‐1];				
			‐‐in;
		}

		// 如果当前值(tmp)比所有已排序(下标out以前)的值都小时, 则插入到列表首个位置(in=0)
		a[in]=temp;
	}
}

 

1
1
分享到:
评论

相关推荐

    Java实现拖拽列表项的排序功能

    总结一下,Java实现拖拽列表项的排序功能主要包括以下步骤: 1. 启用UI组件的拖放功能,如设置`AllowDrop`、`CanReorderItems`和`IsSwipeEnabled`属性。 2. 监听并处理拖放事件,更新数据模型以反映拖放操作。 3. ...

    java List 排序 Collections.sort

    对于大型数据集,`Collections.sort()`通常能提供很好的性能,但如果需要对大量不可变对象或已排序的列表进行排序,使用`TreeSet`或`LinkedHashSet`等集合类型可能会更高效,因为它们在底层实现了红黑树结构,插入和...

    java 中文姓氏 排序

    本文将详细介绍如何在 Java 中对包含中文姓氏的对象列表或字符串列表进行排序。 #### 二、基本概念 1. **Collator 类**:这是 Java 中用于文本排序和检索的标准类。`Collator` 类提供了与语言环境相关的字符串排序...

    Java 选择排序 算法

    - 重复以上步骤,但每次比较都从上一轮结束后的下一个元素开始,直到整个列表排序完成。 3. **Java实现** - 在`SelectSortDemo`这个文件中,你可能会看到一个名为`selectSort`的方法,它接受一个整数数组作为参数...

    最快的排序算法 java最快的排序-在Java中对列表进行排序的最快方法,排序算法数据结构

    在 Java 中,对列表进行排序的最快方法是使用Collections.sort()方法,该方法使用的排序算法是 Timsort,它是归并排序和插入排序的结合体,具有高效的性能和稳定性。 在上述代码中,使用了 Comparator 接口来实现...

    java冒泡排序java冒泡排序集锦方法!

    以上三个知识点总结了关于 Java 排序的一些基本应用,包括基础的冒泡排序算法、使用标准库 `Collections.sort()` 进行排序以及使用 `RuleBasedCollator` 实现国际化排序等。这些技术对于编写高效、可维护的 Java ...

    Java各种排序算法代码.zip

    冒泡排序是最简单的排序算法之一,通过重复遍历待排序的元素列表,比较相邻元素并交换位置,直至列表排序完成。在Java中,冒泡排序通常使用两层循环实现。 2. 插入排序(Insertion Sort): 插入排序通过创建一个...

    java 集合分组与排序

    下面我们将深入探讨如何在Java中实现集合的分组与排序。 1. **集合分组**: 集合分组通常涉及到`GroupingBy`操作,这在Java 8引入的流(Stream)API中得到了很好的支持。`Collectors.groupingBy`方法允许我们将...

    java List排序demo

    在Java编程中,`List`接口是集合框架的一部分,提供了有序、可重复的元素存储功能。当我们需要对`List`中的元素进行排序时,可以利用Java提供...通过学习和理解这个`demo`,你将能够熟练地处理基于字段的列表排序问题。

    java对象排序

    文件名`SortListUtil.java`暗示可能存在一个工具类,用于处理列表排序。这个类可能包含静态方法,提供各种排序功能,如通用的列表排序、根据特定属性的排序等。实际的代码实现取决于具体的业务需求。 总之,Java...

    JAVA冒泡排序算法详解

    ### JAVA冒泡排序算法详解 冒泡排序是一种简单的排序算法,它重复地遍历要排序的元素列表,比较每对相邻元素,如果它们的顺序错误就把它们交换过来。遍历列表的工作是重复进行的,直到没有再需要交换的元素,也就是...

    java 冒泡排序法 PPT文档

    它的名字来源于排序过程中较小的元素像气泡一样逐渐“浮”到数组或列表的顶端。这个PPT文档很可能是详细介绍了Java实现冒泡排序的过程、原理以及优化策略。 冒泡排序的工作原理可以简单概括为:通过比较相邻元素并...

    Java集合排序及java集合类详解.pdf

    ### Java集合排序及Java集合类详解 #### 一、集合框架概述 集合框架是Java编程语言的核心组件之一,用于组织和操作数据集。Java集合框架提供了多种数据结构,包括列表(List)、集(Set)和映射(Map),这些数据结构...

    java 冒泡排序 数组冒泡排序

    冒泡排序的基本思想是,重复地走访过要排序的元素列表,依次比较相邻的两个元素,如果它们的顺序(如从小到大)错误就把它们交换过来。走访列表的工作是重复进行的,直到没有再需要交换的元素,表示该列表已经排序...

    java中实现汉字按照拼音排序(示例代码)

    在Java编程中,有时我们需要对包含汉字的数据进行排序,特别是在处理中文名称或文本时。本文主要探讨如何在Java中实现汉字按照拼音进行排序,并提供相关的示例代码。 首先,Java的标准库提供了`java.text.Collator`...

    java文件夹按时间、大小等排序

    我们可以将这些时间戳收集到一个数组或列表中,然后使用Java的集合框架进行排序。例如: ```java import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; ...

    Java集合排序及java集合类详解

    在本篇中,我们将深入探讨Java集合的排序机制以及集合类的详细使用。 首先,我们来了解一下Java集合的基本分类。Java集合主要分为两大类:List(列表)和Set(集)。List是一个有序的集合,允许元素重复,并且可以...

    java汉字笔画排序源码

    在Java中,可以使用`java.util.Comparator`接口自定义比较规则,根据笔画数对`List&lt;String&gt;`类型的汉字列表进行排序。此外,`java.text.Normalizer`类可以帮助处理Unicode编码,确保笔画计算的准确性。 总的来说,...

    java实现数据结构常见排序算法及详解

    - **原理**:重复地走访要排序的元素列表,依次比较相邻的两个元素,如果顺序错误就交换位置,直到没有任何一对元素需要交换为止。 - **Java 实现**:实现过程中可以通过设置标志位来优化冒泡排序,一旦在一次遍历...

Global site tag (gtag.js) - Google Analytics