【算法】一些线性排序算法

原创 2016年08月30日 20:22:26

一、计数排序

使用这个算法有一个前提,待排序的数组a,其所有的元素分布在区间[0,k],该算法的时间复杂度为O(n+k),当k=O(n)时,运行时间为O(n),所以当k比较小的时候适合采用这个算法

下面给出这个算法实现的代码


#include <iostream>

using namespace std;


void counting_sort ( int a[], int k, int len ) {
    int c[100] = {0};
    int b[100] = {0};


    // 初始化
    for ( int i = 0; i < k; ++i ) {
        c[i] = 0;
    }

    // 统计计数
    for ( int i = 0; i < len; ++i ) {
        c[a[i]]++;
    }

    for ( int i = 1; i <= k; ++i ) {
        c[i] += c[i-1];
    }

    for ( int i = len - 1; i >= 0; --i ) {
        b[c[a[i]]] = a[i];
        c[a[i]]--;
    }

    for ( int i = 0; i < len; ++i ) {
        a[i] = b[i];
    }

}

int main()
{
    int a[] = {4,6,8,3,8,2,9,3,1,0,8,9,1,9,8,0,8,9,8,8,3,2};
    int len = sizeof(a) / sizeof(int);
    counting_sort(a,9,len);
    for ( int i = 0; i < len; ++i ) {
        cout << a[i] << " ";
    }


    return 0;
}


二、基数排序

三、桶排序


版权声明:本文为博主原创文章,未经博主允许不得转载。

算法导论学习之线性时间排序+排序算法稳定性总结

前面我们学习的几种排序算法都是基于比较的,对于任何输入数据他们都是适用的,其最坏的时间复杂度不会低于nlgn; 但对于一些比较特殊的输入数据,我们可以不采取比较的方法而是采用其它的方法对其进行排序,...
  • acm_lkl
  • acm_lkl
  • 2015年03月13日 17:55
  • 832

算法导论学习之线性时间排序

在没有限定条件的情况下,目前的排序算法的最好的时间复杂度大都在O(n lgn)左右,而当加入了一些限定条件后,一些排序算法可以达到线性的时间复杂度。下面让我们来看两个线性时间复杂度的排序算法。 一计数...
  • weiyongle1996
  • weiyongle1996
  • 2017年04月25日 16:21
  • 122

(基于Java)算法之最坏情况下的线性时间选择

线性时间选择(Linear Select):这个名字不太好理解,什么叫线性时间选择?一句话,在线性时间内完成选择。一般情况下是这样的,我们想要找出一个数组中的最大值或最小值,那就只需要一次排列,然后输...
  • u010445247
  • u010445247
  • 2014年04月09日 12:50
  • 1357

【算法导论】线性时间排序之 决策树&计数排序

本文讲述的决策树和计数排序的基本原理和实现方法,欢迎拍砖!
  • cyp331203
  • cyp331203
  • 2014年12月24日 15:23
  • 1307

最坏情况为线性时间的选择算法

输入:一系列数a[0]...a[n-1]和一个整数K 输出:这列数中第k小的数 同样的问题在上篇文章中用快速排序模型,我们得到的平均时间复杂度是O(n),但是遗憾的是最坏情况会达到O(n^2)。这...
  • Tander_Tang
  • Tander_Tang
  • 2016年02月28日 14:37
  • 2048

几种线性时间排序

一般我们使用的堆排序,归并排序都是属于比较排序,也就是通过比较元素的大小来进行排序,可以通过决策树分析出比较排序的时间下界是O(nlgn),堆排序和归并排序都是渐进最优的比较排序算法。还有其他的排序方...
  • SeasonJoe
  • SeasonJoe
  • 2016年07月26日 20:53
  • 823

排序算法之线性排序(计数排序和桶排序)--Java语言

之前的文章讲到的都是比较算法,以下链接是之前文章提到过的一些基本排序方法,其时间复杂度的下界是O(nlogn)。今天提到的两个主角分别是计数排序和桶排序,其时间复杂度好的情况下能够达到O(n),它们不...
  • carson0408
  • carson0408
  • 2017年11月28日 15:19
  • 515

线性回归算法总结

利用样本(已知数据),产生拟合方程,从而对(未知数据)进行预测。 用途:预测、判别合理性。 困难:①选定变量(多元);②避免多重共线性;③观察拟合方程,避免过度拟合;④检验模型的合理性。 因变量与自...
  • American199062
  • American199062
  • 2016年05月21日 16:12
  • 2484

【万字总结】快速排序详解与各种线性时间排序对比

什么是快速排序快速排序简介快速排序(英文名:Quicksort,有时候也叫做划分交换排序)是一个高效的排序算法,由Tony Hoare在1959年发明(1961年公布)。当情况良好时,它可以比主要竞争...
  • NoMasp
  • NoMasp
  • 2015年12月19日 21:27
  • 3262

Linear Regression 线性回归算法

基本介绍   线性回归一般用来解决连续值变量预测问题。是有监督学习。叫线性回归,是因为,我们假定自变量和因变量之间是线性相关关系。 线性回归   基本形式: ...
  • wangpei1949
  • wangpei1949
  • 2017年03月12日 16:47
  • 1108
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】一些线性排序算法
举报原因:
原因补充:

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