繁体   English   中英

O(n)排序算法

[英]O(n) sorting algorithm

这是一个非常可怕的排序算法,只适用于从0到大小的整数。 我不会在大量数据或大数据中使用这样的算法,因为它需要这么多的内存。 考虑一下,这个算法技术上不会在O(n)时间内运行吗?

谢谢

#include <iostream>
#define size 33

int main(){

    int b[size];

    int a[size] = {1,6,32,9,3,7,4,22,5,2,1,0};

    for (int n=0; n<size; n++) b[n] = 0;

    for (int n=0; n<size; n++){
        if (size <= a[n]) throw std::logic_error("error");
        b[a[n]]++;
    }

    int x = 0;
    for (int n=0; n<size; n++){
        for (int t=0; t<b[n]; t++){
            a[x] = n;
            x++;
        }
    }

    for (int n=0; n<size; n++) printf("%d ",a[n]);
}

您正在显示基数排序的变体。 除了桶排序 ,这些算法是不基于比较的排序的主要示例,其可以提供比O(n logn)更好的复杂性。

但请注意,您的实现实际上是O(n + size)

它是O(n) 更具体地说,它是O(n + k) ,其中n是输入数组中元素的数量, k是大小写中的输入范围。 您只是保留数组中出现的所有元素的计数。 然后,您只需按原样阵列中的顺序存储它们的次数。 该算法称为计数排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM