计数排序(Counting sort)是一种稳定的线性时间排序算法。计数排序使用一个额外的数组C,其中第i个元素是待排序数组A中值等于i的元素的个数。然后根据数组C来将A中的元素排到正确的位置。本文地址:http://www.cnblogs.com/archimedes/p/counting-sor...
分类:
编程语言 时间:
2014-10-10 23:51:14
阅读次数:
370
目录 1、计数排序介绍 2、流程图 3、代码实现 4、性能分析 5、参考资料内容 1、计数排序介绍 ...
分类:
其他好文 时间:
2014-09-27 23:32:20
阅读次数:
191
本章节主要证明对包含n个元素的输入序列来说,任何比较排序在最坏情况下都要经过omega(nlgn)次比较。从而证明归并排序和堆排序是渐近最优的。同时,介绍了三种线性时间复杂度的排序算法:计数排序、基数排序和桶排序。1. 排序算法的下界在确定排序算法的下界时,借助决策树模型。决策树模型是一棵完全二叉树...
分类:
其他好文 时间:
2014-08-29 18:01:18
阅读次数:
239
在前面三节排序算法中,我们分别分析了不同策略,思想用于排序,而这些算法都是基于数据间的比较来确定顺序的。假设我不用比较,换一种思路,那么就可以达到时间复杂度为O(n)的排序算法,当然是以付出额外的空间为代价的。一、基本思想线性时间排序的算法思想:(1):在计数排序中,利用比x小或等的元素个数和的来确...
分类:
其他好文 时间:
2014-08-21 00:00:53
阅读次数:
363
经典的排序算法有十种,分别是:选择排序、插入排序、希尔排序、冒泡排序、堆排序、合并排序、快速排序、计数排序、基数排序和桶排序。
下面对这些算法分类如下:
选择排序:简单选择排序、堆排序
插入排序:直接插入排序、二分插入排序、希尔排序
快速排序:快速排序、随机化快速排序
线性时间排序:计数排序、基数排序、桶排序
其他:冒泡排序、合并排序
这些排序排序算法的时间复杂度,稳...
分类:
其他好文 时间:
2014-08-20 16:31:32
阅读次数:
185
/*
* 算法导论 第八章 线性时间排序
* 计数排序、基数排序和桶排序
*/
#include
#include
#include
#include
using namespace std;
void printArray(int arr[], int len, char *str)
{
cout << str << endl;
for (int i=0; i<len; i...
分类:
其他好文 时间:
2014-08-12 00:46:13
阅读次数:
210
任意一个比较排序算法在最坏情况下,都需要做 Ω(n lg n) 次的比较,堆排序和合并排序都是渐进最优的比较排序算法。本文介绍三种以线性时间运行的算法:计数排序、基数排序和桶排序,这些算法都用非比较的一些操作来确定排序顺序。因此,下界 Ω(n lg n) 对它们是不适用的。
分类:
其他好文 时间:
2014-07-14 15:57:36
阅读次数:
263
之前我们介绍了几种O(nlgn)的排序算法:快速排序、合并排序和堆排序,本节我们介绍基于比较的排序算法的下界以及几个线性时间的排序算法——计数排序、基数排序、桶排序。...
分类:
其他好文 时间:
2014-07-08 14:10:28
阅读次数:
243
package chap08_Linear_Time_Sort;import static
org.junit.Assert.*;import java.util.Arrays;import org.junit.Test;public class
CopyOfSortAlgorithms { /**...
分类:
其他好文 时间:
2014-06-12 20:32:16
阅读次数:
231