通过统计元素的个数来达到排序的目的。
优点:
不需要对元素比较就能对元素进行排序(这个想法很巧妙)。
缺点:
1:只能对自然数进行排序。
2:自然数的数值不能太大(排序过程中需要创建一个计数数组,其长度要不能小于数组中的最大值)
实现代码:
import java.lang.reflect.Array;
public class CountSort<T extends Number> {
private T[] array;
public CountSort(T[] array) {
this.array = array;
}
public void sort() {
int[] count = new int[10000];
//统计每个元素的个数
for (T i : array) {
int intValue = i.intValue();
count[intValue] += 1;
}
for (int i = 1; i < count.length; i++) {
count[i] += count[i - 1];
}
@SuppressWarnings("unchecked")
T[] copy = (T[]) Array.newInstance(Number.class, array.length);
for (int i = copy.length - 1; i > -1; i--) {
int value = array[i].intValue();
copy[count[value] - 1] = array[i];
count[value]--;
}
this.array = copy;
}
public static void main(String[] args) {
Integer[] temp = new Integer[] { 9, 8, 7, 4, 3, 5, 6, 1 };
// temp = new Integer[] { 9, 8, 7, 6, 5,4, 3, 2 };
temp = new Integer[] { 2, 5, 3, 0, 2, 3, 0, 3 };
temp = new Integer[] { 9, 8, 7, 4, 3, 5, 6, 1,0 };
CountSort<Integer> qs = new CountSort<Integer>(temp);
qs.sort();
qs.print();
}
private void print() {
for (T i : array) {
System.out.print(i + " ");
}
System.out.println();
}
}
分享到:
相关推荐
《算法导论》是一部经典而全面的算法教材,适合计算机科学领域的本科生和研究生学习使用。本教师手册旨在为授课教师提供教学辅助资料,包括详细的讲义和解题指南等。 #### 二、章节内容详解 **1. 第2章:入门** -...
通过上述章节内容的概述,我们可以看出,《算法导论——习题解答》不仅是一本配套教材的习题解答集,更是一部系统学习算法设计与分析的宝贵资源。通过深入浅出的讲解和丰富的习题解答,本书能够帮助读者建立起坚实的...
#### 算法导论概览与重要性 《算法导论》是一本经典的计算机科学教材,由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein共同编写。本书深入浅出地介绍了算法设计与分析的基本概念和...
3. **线性时间排序**:第八章探讨了几种可以在线性时间内完成排序的算法,比如计数排序和基数排序。这些算法适用于特定类型的数据集,在某些场景下可以比传统的比较排序更加高效。 #### 随机化算法 - **概率分析**...
- **计数排序**:解释了计数排序的原理及其限制条件。 #### 第九章:中值与顺序统计 - **选择问题**:讨论了如何在未排序的序列中找到第k小的元素。 - **中值问题**:介绍了解决中值问题的方法。 ### 第四部分:...
- 计数排序的工作原理。 - 基数排序的过程。 - 桶排序的实现方法及其适用场景。 #### 第9章:中位数和顺序统计量 - **主要内容**:介绍如何高效地找到一组数据中的第k小元素。 - **重点知识点**: - 选择算法...
- **计数排序**:适用于输入范围较小的情况。 - **基数排序**:适用于多位数字排序。 - **桶排序**:将元素分配到若干个“桶”中分别排序。 - **例题解析**:针对每种排序算法的特点,给出具体的应用场景和实现...
《算法导论》原书名——《Introduction to Algorithms》,是一本十分经典的计算机算法书籍,与高德纳(Donald E.Knuth)的《计算机程序设计艺术》(《The Art Of Computer Programming》)相媲美。 《算法导论》由...
- **Lecture Notes**: 探讨几种能在线性时间内完成排序任务的算法,如计数排序(counting sort)、基数排序(radix sort)等。 - **Solutions**: 比较不同线性时间排序算法的特点和适用场景。 **第9章:中位数与顺序...
《算法导论——教师版》是一本由Thomas H. Cormen、Charles E. Leiserson、Ronald L. Rivest和Clifford Stein四位作者共同编写的经典教材的辅助资料,旨在为教师提供深入理解算法设计与分析的全面指南。本书作为...
总的来说,这组源码提供了一个实践《算法导论》理论知识的机会,无论是对合并排序的实现还是逆序对的计数,都是对数据结构和算法基础的巩固。通过实际编写和运行这些代码,读者可以更好地掌握这些重要概念,并为后续...
- **内容**:介绍了几种可以在线性时间内完成排序的算法,如计数排序、基数排序等。 - **重要性**:当数据满足特定条件时,这些算法能够提供非常高的性能。 - **例题解析**:如何根据数据的特点选择合适的线性...
Rivest以及Clifford Stein合著的经典算法教材——《Introduction to Algorithms, Second Edition》(算法导论第二版)的官方教学指导资源。手册由Thomas H. Cormen、Clara Lee和Erica Lin共同编写,旨在帮助教师更...
- **8.1-1 至 8.1-4**:这部分内容可能介绍了计数排序、基数排序等线性时间排序算法的基本原理。 - **8.2-1 至 8.2-4**:这部分内容可能是关于如何实现这些排序算法的具体细节。 - **8.3-1 至 8.3-5**:这部分内容...
- **主题介绍**:介绍一种适用于一定范围内的整数排序的算法——计数排序。 - **关键术语**:计数排序、桶排序。 - **案例分析**:通过实例展示计数排序的执行过程。 **知识点2:基数排序** - **主题介绍**:基数...
- 计数排序:适用于范围较小的情况。 - 基数排序:处理多关键字排序问题。 - 桶排序:通过将数据分配到多个“桶”中再分别排序的方法。 #### 三、其他关键章节简介 除了上述章节外,《算法导论第三版 教师版》...
这一部分包括了对排序下限的理论证明、计数排序、基数排序等特殊排序算法的介绍,以及这些算法的实际应用案例。 #### 三、综合知识点总结 - **算法设计的原则**:《算法导论》不仅提供了丰富的算法实例,更重要的...