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

原创 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;
}


二、基数排序

三、桶排序


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

相关文章推荐

线性时间排序算法

  • 2011年12月12日 09:30
  • 501KB
  • 下载

线性表创建插入删除及各种排序算法实现

常用排序算法基本思想: 1.直接插入排序: 2.冒泡排序: 3.简单选择排序: 4.希尔排序: 5.快速排序: 6.堆排序: 7.归并排序: 8.基数排序: *********************...

三种线性时间O(n)排序算法 - 计数-基数-桶 - C++实现

引言 注:由于没有启用任何公式编辑器,为表示方便:以下涉及时间复杂度表示时,其渐近符号用以下符号代替: 先来看一个定理:任意一个比较排序算法在最坏情况下,都需要做 $(nlgn)次的比较。其可...
  • heyabo
  • heyabo
  • 2013年05月13日 03:38
  • 2588

线性时间的排序算法

前面已经介绍了几种排序算法,像插入排序(直接插入排序,折半插入排序,希尔排序)、交换排序(冒泡排序,快速排序)、选择排序(简单选择排序,堆排序)、2-路归并排序(见我的另一篇文章:各种内部排序算法的实...

腾讯面试题(除掉N个整数中重复数)解题(线性时间,原地置换排序算法)(已修正)

题目:一个大小为N的数组,里面是N个整数,怎样去除重复, 要求时间复杂度为O(n),空间复杂度为O(1).               //下面的思路没问题,但算法有问题,修正后的算法见后面. ...
  • hawksoft
  • hawksoft
  • 2011年10月12日 19:32
  • 14572

一个线性时间下的原地置换排序算法

版权所有,转载请注明出处,谢谢! 一个线性时间下的原地置换排序算法 排序算法 现有的线性时间排序(时间复杂度为ο(n)算法,比如计数排序,基数排序,桶排序等,虽然在时间复杂度上都能保持线性,但不...

排序算法(4)-线性时间排序

在前面三节排序算法中,我们分别分析了不同策略,思想用于排序,而这些算法都是基于数据间的比较来确定顺序的。假设我不用比较,换一种思路,那么就可以达到时间复杂度为O(n)的排序算法,当然是以付出额外的空间...

排序算法之分配排序(线性时间排序)

分配排序的基本思想:排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。...

整数的线性排序算法-基数排序

基数排序对被排序的类型有很强的要求,如对整数的排序,就是在我们知道整数在内存中的表示方法的前提下,才得以实现。当然其对被排序类型要求严格,带来的回报就是时间复杂度达到了线性。下面是我实现的基数排序,实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【算法】一些线性排序算法
举报原因:
原因补充:

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