最快的算法而且不用递归!运行时间是线性的!

原创 2013年12月05日 21:17:03

下面我要来介绍一下计数算法:

这个算法的运行时间是线性的!这可是非常的难得!所以应该归于最快的算法之列,而且由于没有使用递归,使得对系统的资源占用也不大,但还是有缺点的,缺点之一就是它不属于原址排序,但它是稳定的。即输出顺序严格按照输入的顺序,即使是相同元素!常用于基数排序。以下内容摘自《算法导论》计数顺序的基本思想是:

对每一个输入元素x,确定小于x的元素个数。利用这一信息,就可以直接把x放到它在输出数组中的位置上了。例如,如果有17个元素小于x,则x应该在第18个输出位置上。当有几个元素相同时,这一方案仍成立。

下面是一个C语言版本的实例:

/*
下面宏定义中M代表输入数组元素中的最大值,
N代表输入数组的实际长度
计数排序原理:一个数组的位置是根据它前面有多少个数
是小于它的,例如有14个数小于它,那么它的位置就应该
在第15个位置,反之按从大到小排也是同样的原理
*/

#include "stdio.h"
#include "conio.h"
#include "string.h"
#define M  8
#define N  10
/*计数排序,运行时间:n ,堪称是最快的排序算法,而且不需要递归
唯一的缺点是不是原址排序,因为需要临时数组
k代表输入数组中的元素中最大值*/
void count_sort(int A[],int B[])
{
   int c[M+1];
   int i=0;
   for(i=0;i<=M;i++) /*必须对c[]进行初始化为0*/
   {
      c[i]=0;
   }
   for(i=0;i<N;i++)
   {
      c[A[i]]=c[A[i]]+1;
   }
   for(i=1;i<=M;i++) /*统计前面有多少个数是小于下标为i的数*/
      c[i]=c[i]+c[i-1];
   for(i=N-1;i>=0;i--)
   {
      B[c[A[i]]]=A[i];
      c[A[i]]--;
   }
}
main()
{
    int a[N]={2,5,4,3,0,2,8,1,6,7},b[N+1],i;
    count_sort(a,b);
    printf("利用计数算法排序好的数组如下\n");
    for(i=1;i<=N;i++) /*0号元素坚决不能用!*/
        printf(" %d ",b[i]);
    getch();
}


第九章中位数和顺序统计学之“查找第i小的元素(递归版)平均运行时间为O(n)算法”

类似于快速排序的随机化版本,但是这里每次只处理划分的一侧。最坏情况下时间复杂度为O(n^2),即每次都是按最大区间进行划分。但在平均情况下,任何顺序统计量(特别是中位数)都可以在线性时间内得到,时间复...

绝招!不用外挂也能最快的抢到微信红包

绝对好用的教程,教你不使用外挂也可以不错过抢微信红包。 首先是手机调整 为保证最大限度的抢到红包,先将手机恢复出厂设置,然后将手机系统升级到最新版本,同时将微信也升级到最新版本。 ...

最快的高斯模糊(线性时间)Fastest Gaussian Blur (in linear time)

I needed really fast Gaussian blur for one of my projects. After hours of struggling and browsing th...

运行最快的安卓模拟器VirtualBox安装教程

运行最快的安卓模拟器VirtualBox安装教程 |浏览:7930|更新:2014-01-23 14:24|标签:安卓  1 2 3 4 5 6 ...

Cloud云深网谈:不在无谓浪费时间,是互联网赚钱最快的捷径

当你彻底迷上互联网赚钱之后,你会发现,每天最缺的就是时间。 当年我给企业做SEO服务的时候,基本上每天都是每日每夜的干,废寝忘食,甚至希望每天要是有48个小时就好了,因为手上的单子实在太多了根本没有...

最快的数组逆置和数组左旋算法

#include using namespace std; //最快的数组逆置和数组左旋算法 //最快的数组逆置算法,复杂度为O(n/2) void rever(int a[],int size){...
  • gukesdo
  • gukesdo
  • 2012年05月07日 09:55
  • 1203

最快的哈希算法

作者:July、wuliming、pkuoliver   说明:本文分为三部分内容, 第一部分为一道百度面试题Top K算法的详解;第二部分为关于Hash表算法的详细阐述;第三部分为打造一个最快的H...

最快的开平方算法(中值定理法) 作者:李义 2006

关键词:最快 开平方根 算法 中值定理 开方 整数平方数中值定理: 设a、b、c为顺序排列间距为P的3个整数,A、B、C是它们的平方 则有:b2=(a 2+c2)/2-R,即:B=(A+C)/2-R ...

BM算法的shift1表是在所有情况下移动都是最快的吗?

BM算法的shift1表是在所有情况下移动都是最快的吗?
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:最快的算法而且不用递归!运行时间是线性的!
举报原因:
原因补充:

(最多只允许输入30个字)